JavaScript

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

var, let и const

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

function example() {
  if (true) {
    var x = 1    // функциональная область видимости
    let y = 2    // блочная область видимости
    const z = 3  // блочная область видимости
  }
  console.log(x) // 1 - доступна
  console.log(y) // ReferenceError
  console.log(z) // ReferenceError
}
varletconst
ОбластьФункция / глобальнаяБлокБлок
HoistingДа (значение undefined)Да (TDZ)Да (TDZ)
ПереприсваиваниеДаДаНет
Повторное объявлениеДаНетНет

Temporal Dead Zone (TDZ)

let и const поднимаются (hoisting), но недоступны до строки объявления - это называется Temporal Dead Zone.

console.log(a) // undefined  (var hoisted)
console.log(b) // ReferenceError: Cannot access 'b' before initialization
var a = 1
let b = 2

const и объекты

const запрещает переприсваивание, но не делает объект неизменяемым:

const user = { name: "Иван" }
user.name = "Пётр"  // ✅ можно менять свойства
user = {}           // ❌ TypeError: Assignment to constant variable

// Для глубокой заморозки:
const frozen = Object.freeze({ name: "Иван" })
frozen.name = "Пётр"  // silently fails (или TypeError в strict mode)

Что использовать

  • const - по умолчанию для всего.
  • let - когда переменная должна меняться (счётчик, цикл).
  • var - избегать в современном коде. Иногда встречается в легаси.

Источники