返回博客

JS 基础复习笔记(面试用)

JavaScript 基础知识复习笔记,涵盖原型、原型链、继承、闭包、this、箭头函数、instanceof、typeof、V8 内存回收、内存泄露、call、bind、apply、Promise、Event Loop、宏任务、微任务等,并包含一些手写代码练习题。

Mt.r
|

记一下巩固 js 时碰到的一些基础知识

原型,原型链,继承

闭包

一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。

那么 高阶函数是闭包吗?

this 及箭头函数

记不住 this 到底指向谁,我用这个方法记 普通的 this:谁找我,我跟谁 箭头函数的 this:谁造我,我跟谁

面试官可能问箭头函数有什么好处:this 指向不可改变

箭头函数坏处呢?

  1. 箭头函数没有自己的 this 对象(详见下文)。
  2. 不可以当作构造函数,也就是说,不可以对箭头函数使用 new 命令,否则会抛出一个错误。
  3. 不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
  4. 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

instanceof 和 typeof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 typeof 操作符返回一个字符串,表示未经计算的操作数的类型。

简单举例一下好处和坏处 好处:判断值是否存在

if (typeof a === 'undefined') {
  console.log('error');
}

instanceof 修改了原型之后 比较就为 false 了 typeof new 一个 String Functiuon 类型的 会返回 Object

V8 的内存回收机制,避免内存泄露

这个得慢慢去看

  1. 尽可能少地创建全局变量
  2. 手动清除定时器
  3. 少用闭包
  4. 清除 DOM 引用
  5. 弱引用 WeakMap weakSet

call,bind,apply

{% post_link js-call-bind-apply 我的 bind,apply,call 笔记 %}

promise

js 是单线程的,所以执行方式是异步的,promise 是为了解决异步编程中的一些问题,比如回调地狱,让编程更加的直观健壮 然后它也是一个异步操作,代表的是最终的完成还是失败。但通过这样的一个方式你可以把它看成同步执行,而不会阻塞浏览器的运行。

手写 promise1 手写 promise2 手写 promise3

{% post_link js-promise 手写 promise %}

Event Loop 宏任务 微任务

笔记挺好

手写

  • 手写实现 promise
  • 手写实现 promise.all 方法
  • 用 setTimeout 和 clearTimeout 简单实现 setInterval 与 clearInterval
  • 实现 sleep 函数
  • 写一个 ajax
  • 发送文件
  • 手写简单的路由
  • 数据的双向绑定
  • 频率最高的单词
  • 发布 - 订阅
  • 红黄绿灯
  • 手写一个 new
  • 手写消抖节流
  • 数组乱序输出
  • 数组扁平化
  • 柯里化
  • 手写排序

其他

  • 四舍五入
  • 取余
  • 取值
  • 取小数点后几位

react

  • react hooks
  • 底层原理
  • 优化

vue

  • mvvm
  • vue2 3 的区别
  • netTick
  • 双向绑定
  • 生命周期