Встречается на 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
интервью вопросы и ответы
