Сначала появится undefined, затем возникнет ReferenceError при чтении y. Инициализация let y = 20 не будет выполнена после этой необработанной ошибки.
Как var и let ведут себя при подъёме переменных (hoisting)
Сначала появится 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 отдельного вывода нет.