Что выведет код Senior Области видимости и замыкания обновлено

Затенение в блоке

Вопрос

Что выведет код? По строке на каждый вывод.

try {
  let x = 4;
  if (true) {
    console.log('x до объявления');
    let x = 5;
    console.log(x);
  }
} catch (e) {
  console.log('x: ' + e.constructor.name);
}

const y = 4;
if (true) {
  const y = 5;
  console.log('внутри ' + y);
}
console.log('снаружи ' + y);

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: x до объявления, 5, внутри 5, снаружи 4. Почему так Первый блок бросает ReferenceError: внутренняя let затеняет внешнюю на весь блок, и обращение до строки объявления попадает во временную мёртвую зону.

Что выведет

x до объявления
5
внутри 5
снаружи 4

Разбор

Почему так

Первый блок бросает ReferenceError: внутренняя let затеняет внешнюю на весь блок, и обращение до строки объявления попадает во временную мёртвую зону. Второй блок работает: обращение идёт после объявления. Разница между «переменная не объявлена» и «объявлена, но недоступна» - то, что здесь проверяют.

Вывод

x до объявления
5
внутри 5
снаружи 4

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.