Возникнет ReferenceError до вывода значения. Локальная let a затеняет внешнюю a во всей функции, но до своего объявления находится в temporal dead zone.
Какой вывод получит console.log в примере 48
Возникнет ReferenceError до вывода значения. Локальная let a затеняет внешнюю a во всей функции, но до своего объявления находится в temporal dead zone.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какое значение будет выведено в консоль при выполнении следующего кода:
let a = 1;
function bar() {
console.log(a);
let a = 2;
}
bar();
Ответ
Возникнет ReferenceError до вывода значения. Локальная let a затеняет внешнюю a во всей функции, но до своего объявления находится в temporal dead zone.
console.log(a) не обращается к внешней единице: поиск имени уже нашёл локальную привязку. Она ещё не инициализирована, поэтому получить значение нельзя.
Если перенести let a = 2 выше console.log, будет выведено 2. Если удалить локальное объявление, будет использовано внешнее значение 1. Замена let на var дала бы undefined до присваивания, но это другой механизм области видимости и не исправление смысла исходного кода.