Первый блок выведет undefined, затем 10. Во втором блоке первое обращение к i выбросит ReferenceError из-за временной мёртвой зоны; последний console.log не выполнится.
Что выведет console.log при объявлении переменной через var и const
Первый блок выведет undefined, затем 10. Во втором блоке первое обращение к i выбросит ReferenceError из-за временной мёртвой зоны; последний console.log не выполнится.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какие значения будут напечатаны в консоль в каждом из приведённых примеров.
{
console.log(i) // ??
var i = 10
console.log(i) // ??
}
{
console.log(i) // ??
const i = 10
console.log(i) // ??
}
Ответ
Первый блок выведет undefined, затем 10. Во втором блоке первое обращение к i выбросит ReferenceError из-за временной мёртвой зоны; последний console.log не выполнится.
Объявление var поднимается в область функции или script и до присваивания имеет значение undefined. const создаёт отдельное блочное связывание, которое затеняет внешнее i с начала блока, но остаётся неинициализированным до объявления. Поэтому второй блок не прочитает 10 из первого. Ошибка возникает именно при чтении до инициализации, а не из-за повторного имени в соседнем блоке.