当我使用var关键字声明变量时,JS引擎在创建阶段将默认值分配给“消息”
console.log(message); //undefined
var message = "My message";
但带有let关键字
console.log(message); //message is not defined
let message = "My message";
为什么这种意外结果还是ES6中有所改变?
答案 0 :(得分:3)
这是因为使用let
创建了Temporal dead zone
let
绑定在包含声明的(块)作用域的顶部创建,通常称为 “吊装” 。与以var
开头的变量undefined
声明的变量不同,let
变量直到其定义被求值后才初始化。在初始化之前访问变量将导致ReferenceError
。从该块的开始到初始化完成,该变量位于 “时间盲区” 中。