Назад к вопросам
Junior
71
questionbank

В чем отличие между var и const?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Характеристика var const
Область видимости Функция или глобальная Блок ({})
Переназначение Да Нет
Переопределение Да В той же области видимости - нет
Инициализация Необязательна Обязательна при объявлении
Поднятие (hoisting) Поднимается объявление и инициализация (с undefined) Поднимается, но без инициализации (TDZ)
// var
var x = 10;
console.log(x); // 10
x = 20;
console.log(x); // 20
var x = 30; // Переопределение возможно
console.log(x); // 30

function testVar() {
  var y = 5;
  console.log(y); // 5
}
testVar();
// console.log(y); // ReferenceError: y is not defined

if (true) {
  var z = 100;
}
console.log(z); // 100 (var не имеет блочной области видимости)

// const
const a = 10;
console.log(a); // 10
// a = 20; // TypeError: Assignment to constant variable.

const obj = { name: 'Alice' };
console.log(obj.name); // Alice
obj.name = 'Bob'; // Содержимое объекта const можно изменить
console.log(obj.name); // Bob
// obj = { name: 'Charlie' }; // TypeError: Assignment to constant variable.

if (true) {
  const b = 200;
  console.log(b); // 200
}
// console.log(b); // ReferenceError: b is not defined (const имеет блочную область видимости)

// Хойстинг
console.log(hoistedVar); // undefined
var hoistedVar = 1;

// console.log(hoistedConst); // ReferenceError: Cannot access 'hoistedConst' before initialization (временная мертвая зона - TDZ)
const hoistedConst = 2;