Temporal Dead Zone — промежуток от начала области видимости до строки объявления let/const/class, где переменная уже «существует» в scope, но обращение к ней запрещено → ReferenceError.
Пример
{
// TDZ для x начинается здесьconsole.log(x); // ReferenceErrorlet x = 1; // TDZ заканчиваетсяconsole.log(x); // 1
}
Сравнение с var:
console.log(a); // undefinedvar a = 1;
console.log(b); // ReferenceError (TDZ)let b = 1;
Где ещё проявляется
const obj = {
name: "Ada",
// ReferenceError, если обратиться к binding до инициализации в том же scope
};
functionf(a = b, b = 2) {
// параметры тоже имеют TDZ относительно друг друга
}
// f(); // ReferenceError при оценке default для a
Зачем так сделали
Чтобы не маскировать ошибки значением undefined, как у var. На собеседовании: «hoisting есть, но без инициализации — до объявления TDZ».