什么是暂时性死区(TDZ)?
请解释暂时性死区的概念,并举例说明何时会产生 TDZ。
回答
孤独的心
暂时性死区(Temporal Dead Zone, TDZ):从作用域开始到 let/const 声明语句执行完毕之间的区域,在此期间访问该变量会抛出 ReferenceError。
产生条件:
{
// TDZ 开始
console.log(a); // ReferenceError
let a = 1;
// TDZ 结束
}
// typeof 也不再安全
console.log(typeof b); // ReferenceError(之前 typeof 未声明的变量返回 'undefined')
let b = 2;
注意:
const必须在声明时赋值,否则SyntaxErrorclass声明同样有 TDZ- 默认参数也有 TDZ:
function f(x = y, y = 1) {} // ReferenceError: Cannot access 'y' before initialization
f();
设计目的:
- 强制开发者在使用变量前先声明
- 避免 var 的怪异行为(提升至 undefined 导致的隐蔽 bug)
- 使代码行为更可预测