Что такое Temporal Dead Zone?
Основы языка
Temporal Dead Zone (TDZ, временная мёртвая зона) — это период между началом области видимости и строкой объявления переменной let/const, в котором обращение к ней вызывает ReferenceError.
Как работает
Переменные let/const всплывают (движок знает о них), но не инициализируются до строки объявления. Обращение к ним в этот промежуток — ошибка:
console.log(x); // ReferenceError — TDZ
let x = 5;
console.log(x); // 5 — после объявления окTDZ начинается с входа в область видимости и заканчивается на строке объявления.
var против let/const
- var — всплывает и сразу инициализируется
undefined(нет TDZ):
console.log(y); // undefined
var y = 5;- let/const — в TDZ до объявления.
Зачем нужна TDZ
- Ловит баги раннего доступа к переменным (вместо тихого
undefined). - Делает
constосмысленным (нельзя использовать до инициализации). - Более предсказуемое поведение, чем у
var.
Коротко для собеседования
TDZ — промежуток от начала области видимости до объявления let/const, где обращение к переменной даёт ReferenceError. Переменные всплывают, но не инициализированы. В отличие от var (сразу undefined). TDZ ловит баги раннего доступа.