Прежде чем мы начнем понимать 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.