Что такое временная мертвая зона?
Я слышал, что доступ к значениям let
и const
до их инициализации может вызвать ReferenceError
из-за чего-то, называемого временной мертвой зоной.
Что такое временная мертвая зона, как она связана с областью применения и подъемом, и в каких ситуациях она встречается?
Ответы
Ответ 1
let
и const
имеют две большие отличия от var
:
- Они заблокированы в области.
- Доступ к
var
до его объявления имеет результат undefined
; доступ к let
или const
, прежде чем он будет объявлен throws ReferenceError
:
console.log(aVar); // undefined
console.log(aLet); // causes ReferenceError: aLet is not defined
var aVar = 1;
let aLet = 2;
Ответ 2
Подъемно:
let
, const
, var
- все это получает поднятый процесс.
(что означает, что они идут вверх и объявляются в верхней части области.)
Инициализация:
-
var
go также генерирует начальный процесс и получает начальное значение undefined
.
- в то время как
let
, const
не запускает начальный процесс, поэтому их значения по-прежнему недоступны, хотя они уже объявлены. что помещает их во temporal dead zone
Итак, в скором времени:
процесс подъема: var
, let
, const
Процесс инициализации: var
Ответ 3
В случае переменных let и const, в основном, временная мертвая зона является зоной
"до того, как ваша переменная объявлена",
то есть, где вы не можете получить доступ к значению этих переменных, он выдаст ошибку.
ех.
let sum = a + 5; //---------
//some other code // | ------> this is TDZ for variable a
// |
console.log(sum) //---------
let a = 5;
код выше выдает ошибку
тот же код не выдаст ошибку, когда мы используем var для переменной 'a',
ех.
var sum = a;
console.log(sum) //prints undefined
var a = 5;