Прежде чем мы начнем понимать Temporal Deadzone. Вы должны понимать подъем в Javascript. Вы можете проверить мой пост о подъеме здесь.

пусть против вар.

Давайте посмотрим на приведенный ниже пример.

CODE:
console.log(fruit1);
console.log(fruit2);
var fruit1 = "apple";
let fruit2 = "mango";
OUTPUT:
undefined
ReferenceError: Cannot access 'fruit2' before initialization

Мы получили undefined для «var», потому что он поднимается в компоненте памяти контекста выполнения. Точно так же «let» также поднимается, но мы не получили undefined вместо «ReferenceError».

Почему пусть выдает ReferenceError?

Да, пусть поднимается, но память выделяется в другом пространстве памяти, в отличие от var. Можно сказать, что let находится во временной мертвой зоне.

Что, черт возьми, такое Temporal Dead Zone в Javascript?

Мы не можем получить доступ к переменной let до ее полной инициализации. Если в объявлении let не задано начальное значение, тогда переменная инициализируется с undefined, но при попытке доступа она выдает ReferenceError. Только когда переменная полностью инициализирована значением, мы можем получить к ней доступ. Такая природа запрета доступа до инициализации называется временной мертвой зоной.

Конец временной мертвой зоны.

Временная мертвая зона заканчивается, когда переменная инициализируется значением. Давайте посмотрим на пример и лучше поймем.

CODE:
let fruit = "apple";
console.log(fruit2);
OUTPUT:
apple

Здесь мы успешно получили доступ к переменной let, потому что перед обращением к ней мы инициализировали ее значением. Так что он не находился во временной мертвой зоне. Но если бы мы могли иметь «console.log(fruit)» в приведенной выше строке и объявленную переменную ниже, мы получили бы вывод как ReferenceError из-за временной мертвой зоны.

Поток выполнения в Javascript и временная мертвая зона (TDZ).

Давайте рассмотрим больше примеров, чтобы получить более глубокое представление.

Вызов функции за пределами временной мертвой зоны

CODE:
// TDZ starts
const sayHello = () => console.log(greet);
// Within the TDZ if we access greet throws `ReferenceError`
let greet = "hello"; // End of TDZ
sayHello(); // called outside TDZ
OOUTPUT:
hello

Вызов функции внутри временной мертвой зоны

CODE:
// TDZ starts at beginning of scope
const sayHello = () => console.log(greet);
sayHello();// Accessing within the TDZ throws `ReferenceError`
let greet = "hello";// End of TDZ
OUTPUT:
ReferenceError

Из приведенных выше двух примеров можно сделать вывод, что временная мертвая зона переменной зависит от времени выполнения, а не от порядка написания кода.

Последнее замечание, которое нужно запомнить.

var поднимается в глобальном пространстве памяти и получает значение undefined во время выделения памяти. Но let выделяется памятью в отдельном пространстве памяти и находится в временной мертвой зоне до тех пор, пока не будет полностью инициализирован значением.

И да, const также выделяется памятью в отдельном пространстве памяти и проходит через временную мертвую зону точно так же, как let.

Если вы хотите больше такого контента, подписывайтесь на меня в Twitter, LinkedIn и Instagram.