变量提升
先说三句总结性的话:
let 的「创建」过程被提升了,但是初始化没有提升。
var 的「创建」和「初始化」都被提升了。
function 的「创建」「初始化」和「赋值」都被提升了。
变量提升的规律
在进入一个执行上下文后,先把 var 和 function 声明的变量前置,再去顺序执行代码。
PS:作用域分为全局作用域和函数作用域,用var声明的变量,只在自己所在的所用域有效。
我们举例来看看下面的代码。
代码 1:
1 | console.log(fn); |
相当于:
1 | var fn = undefined; |
打印结果:

代码 2:
1 | console.log(i); |
相当于:
1 | var i = undefined; |
打印结果:

代码 3:
1 | var a = 1; |