CodeWalk

什么是暂时性死区(TDZ)?

作者:孤独的心 · 2026-05-30 12:55

请解释暂时性死区的概念,并举例说明何时会产生 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 必须在声明时赋值,否则 SyntaxError
  • class 声明同样有 TDZ
  • 默认参数也有 TDZ:
function f(x = y, y = 1) {} // ReferenceError: Cannot access 'y' before initialization
f();

设计目的

  • 强制开发者在使用变量前先声明
  • 避免 var 的怪异行为(提升至 undefined 导致的隐蔽 bug)
  • 使代码行为更可预测