ES6 的 let 为什么具有块级作用域和暂时性死区?
简答题困难823 次浏览
参考答案与解析
# 核心结论
let 的关键不只是“不会像 var 那样变量提升”。更准确的说法是:词法声明在进入作用域时已经被创建,但在执行初始化语句之前处于未初始化状态,此区间称为暂时性死区。此时访问变量会抛出 ReferenceError。let 还具有块级作用域、同一作用域禁止重复声明,以及在循环中按次创建词法绑定等语义。
{
console.log(value);
let value = 1;
}
上面的访问并不是去外层寻找同名变量。解析阶段已经确认当前块存在 value 绑定,这个绑定遮蔽了外层名称;但它尚未初始化,所以访问失败。把这种行为简单描述为“完全不提升”
