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

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

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

  • var: Объявления переменных с ее использованием имеют функциональную область видимости (function scope), что означает, что переменная доступна везде в функции, где была объявлена.
  • const: Как и `let`, она имеет блочную область видимости (block scope), ограничивая доступность переменной блоком (например, циклом или условным оператором), в котором была объявлена.

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

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

Поднятие (Hoisting)

  • var: Переменные, объявленные через нее, поднимаются в начало своей функциональной области видимости перед выполнением кода. Однако до их объявления в коде они будут иметь значение `undefined`.
  • const: Подобно `let`, ее объявления тоже поднимаются, но доступ к переменной до её объявления в коде приведёт к ошибке `ReferenceError`. Это явление известно как "временная мертвая зона".

Инициализация

  • var: Эти переменные можно объявить без инициализации, и их начальное значение будет `undefined`.
  • const: Эти переменные требуют обязательной инициализации при объявлении. Если попытаться объявить его без инициализации, это приведет к синтаксической ошибке.

Примеры

var varVariable = 1;
varVariable = 2; // Переназначение возможно

const constVariable = { a: 1 };
constVariable.a = 2; // Изменение содержимого объекта возможно
// constVariable = { b: 3 }; // Переназначение вызовет ошибку

if (true) {
  var varScope = "доступна везде в функции";
  const constScope = "доступна только в этом блоке";
}
console.log(varScope); // Выведет строку
console.log(constScope); // Ошибка: constScope не определена

Использование `var`, `let` и `const` зависит от нужд разработки. `var` предоставляет функциональную область видимости и большую гибкость за счёт возможности переназначения, но это может привести к ошибкам из-за непреднамеренных изменений или переназначений. `const` используется для объявления переменных, значение которых не должно изменяться, что помогает предотвратить случайное переназначение и делает код более предсказуемым. Сейчас `let` и `const` являются предпочтительными для блочной области видимости и контроля за изменяемостью данных.

Feb. 22, 2024, easyoffer