加载中...

暂时性死区(Temporal Dead Zone,TDZ)是 ES6 引入的概念,指用 let、const、class 声明的标识符,从其所在块级作用域开始、到声明语句被执行为止的这段区间。在此区间内访问该变量会抛出 ReferenceError,而不是像 var 那样得到 undefined。
let/const 声明同样会在编译阶段被登记到作用域(即也存在"提升"),但引擎将其标记为"未初始化"状态,只有执行流真正走到声明语句时才完成初始化。之所以叫"暂时性"(temporal),是因为死区以执行时间而非代码位置界定——只要声明先被执行,写在其上方的函数内访问也是合法的。
typeof 一个 TDZ 中的变量同样报错(而 typeof 未声明变量返回 "undefined");函数默认参数、类继承中 super 调用前使用 this 也存在类似的死区语义。
TDZ 让"先声明后使用"从编码规范变成语言级强约束,提前暴露错误,是 ES6 修正 var 缺陷的重要一环。

登录 后参与讨论
暂无讨论,来发表第一条评论吧