首先先看几段代码:
1:
a = 2;
var a;
console.log(a); // 2
2:
console.log(b);
var b = 2; //undefined
3:
c = 2;
console.log(c);
var c; //2
为什么会这样呢?
编译阶段的一部分工作就是找到所有的声明(这里的声明是指定义声明,赋值声明不会被提升),用合适的作用域把它们关联起来。举个栗子:第二段代码中 var b = 2 —>
var b; b = 2;
这里 var b ;
会被提升,而b =2;是赋值声明,不会提升,会在原地等待执行阶段 。
困扰了我好久的问题终于搞懂了orz
更多请移步《你不知道的JavaScript》一书