Ответ
Temporal Dead Zone (TDZ) — это период времени между созданием переменной (область видимости) и её инициализацией, когда к ней нельзя обратиться.
Применяется к let и const, но не к var.
Пример:
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 10;
Особенности:
- Переменные
let/constсуществуют с момента входа в блок, но недоступны до присваивания. varподнимается (hoisting) со значениемundefined, поэтому TDZ для него не существует.
Как избежать:
Инициализируйте переменные до использования.
Ответ 18+ 🔞
А, слушай, вот эта ваша Temporal Dead Zone, TDZ, блядь! Ну это ж классика, ёпта! Представь себе: переменная уже родилась, в области видимости, но она ещё как бы в утробе, недоношенная, блядь. И ты к ней лезешь: «Эй, дай значение!» А она тебе: «Пошёл нахуй, я ещё не готова!» И кидает тебе ReferenceError прямо в ебало.
Это чисто про let и const, да. А старый добрый var — тот по-хамски лезет вперёд, как пьяный дядя на свадьбе, со своим undefined. Для него никакой мёртвой зоны нет, он везде пролезет, падла.
Вот смотри, пример, чтобы совсем пиздец понятно стало:
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 10;
Вот тут и начинается ёперный театр! Интерпретатор видит let x, он знает, что x где-то там есть, но пока это просто призрак, блядь. А ты уже тянешься к нему ручками — и получаешь по шапке. Пиздец и позор.
А всё почему? Потому что движок — он не дурак, он специально так сделал, чтобы мы, распиздяи, не выёбывались и не лезли к переменным, которые ещё нихуя не значат. Порядок, блядь, дисциплина!
Как от этого спастись, спросишь? Да элементарно, Ваня! Не будь мудаком — инициализируй переменную ДО того, как полезешь её использовать. Сделал let — сразу напихал в неё значение, и спи спокойно. Вот и вся магия, в рот меня чих-пых!
Запомни: TDZ — это не баг, это такая хитрая жопа, которая защищает тебя от самого себя. Чтобы ты, такой умный, случайно не выстрелил себе в ногу, пока перезаряжаешь обойму.