Какой вывод получит console.log в примере 48

Возникнет ReferenceError до вывода значения. Локальная let a затеняет внешнюю a во всей функции, но до своего объявления находится в temporal dead zone.

Короткий ответ

Что ответить на собеседовании

Возникнет 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 до присваивания, но это другой механизм области видимости и не исправление смысла исходного кода.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее