Как var и let ведут себя при подъёме переменных (hoisting)

Сначала появится undefined, затем возникнет ReferenceError при чтении y. Инициализация let y = 20 не будет выполнена после этой необработанной ошибки.

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

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

Сначала появится undefined, затем возникнет ReferenceError при чтении y. Инициализация let y = 20 не будет выполнена после этой необработанной ошибки.

Подробный разбор

Ответ с пояснениями

Условие

Что будет выведено в консоль при запуске следующего кода:

console.log(x);
var x = 10;

console.log(y);
let y = 20;

Ответ

Сначала появится undefined, затем возникнет ReferenceError при чтении y. Инициализация let y = 20 не будет выполнена после этой необработанной ошибки.

var x существует с начала области видимости и до присваивания содержит undefined. let y тоже имеет область действия с начала блока, но остаётся в temporal dead zone до строки объявления. Поэтому нельзя говорить, что let «вообще не поднимается»: ключевое отличие — запрет доступа до инициализации. Число 10 не печатается, поскольку после присваивания x отдельного вывода нет.

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

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

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

Подробнее