Skip to content

JS 基础 ( ES5)

1. 原型

这里可以谈很多, 只要围绕 [[ prototype ]] 谈,都没啥问题

2. 闭包

牵扯作用域, 可以两者联系起来⼀起谈

3. 作用域

词法作用域, 动态作用域

4. this

不同情况的调用, this 指向分别如何 。顺带可以提⼀下 es6 中箭头函数没有 this , arguments , super 等, 这些只依赖包含箭头函数最接近的函数

5. call,apply , bind 三者用法和区别

参数 、绑定规则 ( 显示绑定和强绑定), 运行效率 ( 最终都会转换成⼀个⼀个的参数去运行) 、运行情况 ( callapply 立即执行, bindreturn 出⼀个 this “固定”的函数, 这也是为什么 bind 是强绑定的⼀个原因)

注:“固定”这个词的含义, 它指的固定是指只要传进去了 context ,则 bindreturn 出来的函数 this 便⼀直指向 context , 除非 context 是个变量

6. 变量声明提升

js 代码在运行前都会进行 AST 解析, 函数申明默认会提到当前作用域最前面, 变量申明也会进行提升 。但赋值不会得到提升 。关于 AST 解析, 这里也可以说是形成词法作用域的主要原因