执行上下文
b() // call b
console.log(a) // undefined
var a = 'Hello world'
function b() {
console.log('call b')
}
对于上述代码,我们一般都非常熟悉他的输出结果。我们理解上一般都是说,这个地方是变量和函数提升,这样理解本身没有任何问题.
但是更加准确的解释是:在生成执行上下文时,会有两个阶段.第一个阶段是创建的阶段(具体步骤是创建VO),JS解释器会找出需要提升的变量和函数,这个时候首先去提升变量,然后再去提升函数,重复名称的时候,函数声明在后面会替代变量.给他们提前在内存中开辟好空间,函数的话,会将整个函数存入内存中,变量只声明并复制为undefined,所以在第二个阶段,也就是代码执行阶段,我们可以直接提前使用.