Встречается на 23% собеседований по JavaScript

Чем var отличается от const

Ключевые слова var и const в JavaScript используются для объявления переменных, но имеют существенные различия в области видимости, возможности переназначения, поведении при поднятии и обязательности инициализации. var имеет функциональную область видимости, допускает переназначение и поднимается со значением undefined, тогда как const имеет блочную область видимости, запрещает переназначение и требует обязательной инициализации, а доступ до объявления вызывает ReferenceError.

Область видимости

  • var: Область видимости ограничена функцией, в которой переменная объявлена. Если переменная объявлена вне функции, она становится глобальной. Это означает, что переменная доступна в любой точке функции, включая вложенные блоки (например, if или for).
  • const: Как и let, const имеет блочную область видимости. Переменная доступна только внутри блока {}, в котором объявлена. За пределами блока она не определена.

Пример:

javascript
if (true) {
  var varScope = "доступна везде в функции";
  const constScope = "доступна только в этом блоке";
}
console.log(varScope); // "доступна везде в функции"
console.log(constScope); // ReferenceError: constScope is not defined

Переназначение и изменение

  • var: Переменную можно переназначить сколько угодно раз. Это может привести к непреднамеренным изменениям, особенно в больших функциях.
  • const: Переменную нельзя переназначить. Попытка присвоить новое значение вызовет TypeError. Однако, если переменная хранит объект или массив, содержимое объекта можно изменять (добавлять свойства, изменять элементы). const защищает только от переназначения самой переменной, а не от изменения внутреннего состояния.

Пример:

javascript
var varVariable = 1;
varVariable = 2; // ОК

const constVariable = { a: 1 };
constVariable.a = 2; // ОК, изменение свойства
// constVariable = { b: 3 }; // TypeError: Assignment to constant variable.

Поднятие (Hoisting) и инициализация

  • var: Объявления поднимаются в начало функции, но инициализация остаётся на месте. До строки объявления переменная существует со значением undefined. Это может приводить к неожиданному поведению, если использовать переменную до её объявления.
  • const: Объявления также поднимаются, но переменная находится во "временной мёртвой зоне" (temporal dead zone) до момента инициализации. Доступ к переменной до объявления вызывает ReferenceError. Кроме того, const требует обязательной инициализации при объявлении: const x; вызовет SyntaxError.

Когда использовать

  • var: В современном коде практически не используется. Может встречаться в старом коде или в специфичных случаях, когда требуется функциональная область видимости. Однако из-за риска ошибок лучше избегать.
  • const: Используется по умолчанию для переменных, которые не должны переназначаться. Это делает код более предсказуемым и защищает от случайных изменений.
  • let: Используется, когда нужно переназначать переменную, но с блочной областью видимости.

Коротко

  • var — функциональная область видимости, можно переназначать, поднимается с undefined, инициализация необязательна.
  • const — блочная область видимости, нельзя переназначать, поднимается с ошибкой до инициализации, инициализация обязательна.
  • const не делает объект иммутабельным: можно менять свойства, но не саму переменную.
  • В современном JavaScript предпочтительны const и let, а var считается устаревшим.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы