> Почему в JavaScript переменная, объявленная через var, всплывает и инициализируется значением undefined? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Альфа-банк
Стек: JavaScript
> Пример ответа
В JavaScript переменные, объявленные через var, подвергаются механизму hoisting (всплытие). Это означает, что на этапе компиляции перед выполнением кода движок JavaScript "поднимает" объявление переменной в начало её функциональной или глобальной области видимости. Однако инициализация (присвоение значения) остаётся на своём месте.
Почему же переменная инициализируется значением undefined? Потому что на этапе создания контекста выполнения (creation phase) для каждой переменной var в памяти резервируется место, и ей автоматически присваивается значение undefined до того, как будет выполнен код с присваиванием. Это поведение заложено в спецификации ECMAScript: объявление переменной обрабатывается до выполнения строки кода, но без её инициализации.
Пример:
JAVASCRIPTconsole.log(a); // undefinedvar a = 5;
Здесь var a всплывает, и a получает undefined, а присвоение a = 5 происходит только на строке с инициализацией. В отличие от let и const, которые тоже всплывают, но находятся во "временной мёртвой зоне" (Temporal Dead Zone) до момента фактической инициализации, что приводит к ошибке ReferenceError при попытке доступа до объявления.
> Похожие задачи по frontend
Как работает массив tickets в JavaScript
Как различать и отличать action в Redux?
Какие структуры данных использовать для хранения параметров и результатов мемоизации в JavaScript
Что такое JSON
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью