Рассмотрим три ключевых отличия между объявлениями переменных в JavaScript:
- Область видимости (Scope)
var: Имеет функциональную область видимости. Переменная доступна внутри функции, где объявлена, или глобально, если объявлена вне функции.
let: Имеет блочную область видимости. Переменная доступна только внутри блока {}, где объявлена.
const: Также имеет блочную область видимости, как и let.
- Поднятие (Hoisting)
var: Поднимается. Может использоваться до объявления, но значение будет undefined.
let: Тоже поднимается, но нельзя использовать до объявления (временная мертвая зона).
const: Аналогично let, существует временная мертвая зона.
- Переназначение и изменение
var: Можно переназначать и изменять.
let: Можно изменять, но нельзя переобъявлять в той же области видимости.
const: Нельзя переназначать, но если содержит объект, свойства объекта можно изменять.
Пример:
// var
var x = 1;
var x = 2; // Допустимо
if (true) {
var x = 3; // Изменит переменную x даже за пределами блока
}
console.log(x); // 3
// let
let y = 1;
// let y = 2; // Ошибка: нельзя повторно объявить
if (true) {
let y = 2; // Новая переменная, только для этого блока
}
console.log(y); // 1
// const
const z = 1;
// z = 2; // Ошибка: нельзя переназначить константу
const obj = { value: 1 };
obj.value = 2; // Допустимо: изменяем свойство, а не саму константу
console.log(obj.value); // 2