Код выведет undefined.
JavaScript поднимает объявления var в начало своей области видимости функции до начала выполнения. Это означает, что код внутри foo() фактически интерпретируется как:
function foo() {
var a; // объявление поднято в начало
console.log(a); // a равна undefined здесь
a = 2; // присваивание остается на месте
}
Только объявление поднимается — присваивание (= 2) остается на исходном месте.
Несмотря на то что var a = 1 существует в глобальной области видимости, локальная var a внутри foo() скрывает её. Как только JavaScript видит объявление var a где-либо внутри foo(), вся функция рассматривает a как локальную переменную — даже до того, как выполнение доходит до строки с присваиванием.
var имеет область видимости функции, а не блокаvar скрывает любую внешнюю переменную с тем же именем во всей функцииlet или const вместо этого приведёт к ReferenceError из-за temporal dead zone, что сделает ошибку более очевиднойКогда var объявление поднимается в начало области видимости функции, то и объявление, и его инициализация перемещаются перед выполнением любого другого кода.
Новый — ещё не проверен сообществом
Вы