Коллеги, я тут в трех соснах запутался :)
function abc() {
a = 2;
console.log('func a ',a);
}
let a = 3;
abc();
console.log("let a ->",a);
Вот такой код генерирует следующий вывод
func a 2
let a -> 2
Я ожидал что этот код выдаст в конце
let a -> 3
Собственно вопрос про лексическое окружение функции. Когда функция abc создается - она условно поднимается наверх и в ее лексическом окружении ссылка на внешнее окружение ведет на abc и как показала практика туда же попадает переменная a.
Не могу понять почему так происходит ?
Для let переменных существует "dead zone" - когда обращение к ним до момента объявления выдает refrence error, т.е. let переменные не "поднимаются" вверх
В моем понимании при объявлении function abc let переменная a находится в "dead zone", но при этом как то попадает в лексическое окружение функции abc
У меня как то эти два момента никак не связываются между собой.
Можете объяснить ?
let a = 3; abc();чтобы сталоabc(); let a = 3;и увидишь ожидаемую ошибку – Grundy Sep 11 '22 at 05:45