ENIGMA AI
ENIGMA AI

В чем разница между var, let и const в JavaScript?

встречается 20× JavaScript junior language_specific

Как ответить

Разница между этими способами объявления переменных заключается в области видимости, механизме поднятия (hoisting) и возможности переназначения значения. Если коротко: var — это старый стандарт с функциональной областью видимости, а let и const — современные инструменты с блочной областью видимости, которые помогают избегать типичных ошибок при разработке.

  • Область видимости (Scope). var ограничивается функцией. Если объявить переменную через var внутри цикла if или for, она будет доступна и за пределами этих блоков. let и const имеют блочную область видимости: они «живут» только внутри фигурных скобок {}, где были созданы.
  • Поднятие (Hoisting). Переменные на var поднимаются в начало контекста выполнения. К ним можно обратиться до строки объявления и получить undefined. let и const тоже поднимаются, но не инициализируются. Попытка обратиться к ним до объявления вызовет ошибку ReferenceError. Этот период называется «временной мертвой зоной» (Temporal Dead Zone, TDZ).
  • Переназначение и мутация. let позволяет менять значение переменной сколько угодно раз. const требует инициализации при объявлении, и его нельзя переназначить. Однако важно помнить, что const не делает объекты или массивы неизменяемыми — мы можем менять их свойства или содержимое, нельзя только заменить сам объект на другой.

Пример, демонстрирующий разницу в области видимости:

if (true) {
  var a = 1;
  let b = 2;
}
console.log(a); // Выведет 1
console.log(b); // Ошибка: b is not defined

В современной разработке стандартным подходом считается использование const по умолчанию для всех переменных. Если значение переменной действительно должно измениться в процессе (например, счетчик в цикле), используется let. Использование var в новом коде практически не встречается, так как оно усложняет отладку из-за непредсказуемого поведения области видимости.

Ключевые тезисы

  • Различие между функциональной (var) и блочной (let/const) областями видимости
  • Понятие временной мертвой зоны (TDZ) для let и const
  • Поведение при переназначении: константы нельзя переназначить, но можно мутировать
  • Рекомендация использовать const по умолчанию для повышения предсказуемости кода

Что спросят дальше

  • — Что произойдет, если изменить свойство объекта, объявленного через const?
  • — Как работает замыкание внутри цикла for при использовании var и let?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение