T.D.Z, что означает Temporal Dead Zone, имеющее само по себе заявленное значение. Temporal Dead Zone звучит как научно-фантастическая фраза, но мы должны встретить эти три волшебных слова, чтобы понять, с какими терминами и концепциями мы работаем каждый день. Итак, прежде чем двигаться дальше, давайте углубимся в эти три слова: Temporal, Dead и Zone.

Temporal означает что-то вроде временного, слово dead означает какое-то безжизненное состояние, а zone обозначает область, которая означает в мире программирования, связанную с памятью, или ее можно рассматривать как период времени или фазу. Таким образом, объединение всех этих трех терминов повествует о том, что какая-то сущность временно находится в безжизненном или неактивном состоянии и не может быть использована для какой-либо работы. Чтобы понять эту тему, нужно иметь представление о ключевом слове let и const в JavaScript, чтобы понять его с умом. Мы должны немного взглянуть на let и const и их область действия в этом конкретном разделе!
Объявления const и let имеют блочную область видимости, это означает, что они доступны только в окружении { }; var не имеет такого ограничения, поэтому он определен в области видимости функции.
‹script›
let age = 5;
let birthday= true;
if(birthday){
let age = 6;< br /> }
console.log(возраст); // 5
‹/script›
его вывод равен 5, потому что повторное объявление возраста до 6 доступно только внутри фигурных скобок. Следовательно, ключевое слово «let» имеет область действия блока.
Аналогично:
‹script›
var age = 5;
var birthday= true;
if(birthday){
var age = 6;
}
console.log(age); // 6
‹/script›
теперь его вывод равен 6, это связано с тем, что ключевое слово «var» имеет глобальную область действия и обращается к повторной инициализации переменной с помощью другое значение.

ДЕКЛАРАЦИЯ И ИНИЦИАЛИЗАЦИЯ

Объявление переменной указывает, что мы выделяем память для этой переменной, а инициализация указывает, что мы присваиваем переменной какое-то значение.

Снова заходя в TDZ, вы можете подумать, зачем нужен доступ к какой-либо переменной перед инициализацией ?? Это правда и неправильная практика, но у нее есть конкретная причина, позволяющая разработчикам писать хороший код и упрощающая отладку в отношении ключевых слов let и const.

Давайте внимательно разберемся с TDZ:
‹script›
console.log(x);
// undefined
var x= 6;
console.log(x);
//6
‹/script›
Здесь создается глобальный контекст выполнения и выделяется память для x; означает, что x получил место в памяти, и движок JS помещает undefined, теперь фаза выполнения потока начинается во время выполнения этого оператора console.log и печатает хранилище значений в x, которое не определено.
Теперь в следующей строке x присваивается 6, а неопределенное значение x заменяется на 6.
Теперь, используя некоторый код в отношении let и const :
‹script›
console.log(x);
console.log(z);
var x=6;
let z = 4;
console.log(x);
console.log(z);
‹/script›
//
undefined
// referenceError : невозможно получить доступ к z до инициализации
Снова сначала будет создан глобальный контекст выполнения, и начнется фаза выделения памяти , при этом переменная x ставит туда undefined. Вскоре z получит место в другом месте памяти, и так же, как x, в качестве значения будет присвоено значение undefined. Теперь начинается фаза выполнения потока, во время которой выполняется оператор console.log(x) и печатает значение x, которое не определено.
Переходим к следующему строка, есть console.log(z) j, в этом случае avaScript выдаст ссылочную ошибку, и программа будет остановлена ​​(вызывая tdz).

"Таким образом, мы можем сказать, что TDz – это время, прошедшее с момента, когда эта переменная let была поднята, и до момента, когда она инициализирует какое-то значение, время между ними известно как временная мертвая зона"

Спасибо !