Подъем и "пусть" в JavaScript
Вопрос:
почему это не вызывает ошибку ссылки:
console.log(a)
let a = 5;
но это выдает ошибку ссылки:
{
console.log(a)
let a = 5;
}
Теперь, если мы используем 'var', то в обоих случаях код будет выполняться и выходить из системы 'undefined', но кто-то может объяснить, что происходит с 'let' (и 'const').
1 ответ
Как указано в комментариях, оба из них выдают ошибку ссылки.
console.log(a)
let a = 5;
{
console.log(a)
let a = 5;
}
Но вы правы. Если вы используете var
затем undefined
вошел в консоль.
console.log(a)
var a = 5;
Из поста в блоге, который написан не мной, где вы можете узнать больше об этом.
Механизм JavaScript обрабатывает все объявления переменных, используя "var", как если бы они были объявлены в верхней части функциональной области (если она объявлена внутри функции) или глобальной области (если она объявлена вне функции) независимо от того, где происходит фактическое объявление. По сути, это "подъем".
Это относится только к var
, let
а также const
выдаст ошибки ссылки и хорошо документирован (см. спецификацию ECMAScript 2015). Это потому что хотя let
а также const
они не инициализируются до тех пор, пока код не выполнит строку инициализации. Время между let
или же const
Подъем и инициализация обычно известны как временная мертвая зона.