Что выведет код 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 ошибок.