理解背后原理:变量生命周期
- 声明阶段 是在作用域中注册一个变量
- 初始化阶段 是分配内存并为作用域中的变量创建绑定,在此步骤中,变量将使用undefined自动初始化
- 赋值阶段 是为初始化的变量赋值
变量在通过声明阶段时是 尚未初始化 状态,但未达到初始化状态。
let变量的处理方式与var不同,主要区别在于 声明 和 初始化 阶段是分开的。
变量未初始化时,变量位于暂时死区。
当解释器执行到语句let variable时,传递初始化阶段,变量退出暂时死区。
let的「创建」过程被提升了,但是初始化没有提升。
var的「创建」和「初始化」都被提升了。
function的「创建」「初始化」和「赋值」都被提升了。