PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

В чем разница между var, let и const?

Основы языка

`var`, `let` и `const` — три способа объявить переменную, отличающиеся областью видимости, hoisting и возможностью переприсваивания.

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

  • var — функциональная: видна во всей функции, игнорирует блоки {}.
  • let / const — блочная: видны только внутри {}, где объявлены.

Hoisting

  • var — поднимается и инициализируется как undefined.
  • let / const — поднимаются, но находятся в temporal dead zone (TDZ) до строки объявления — обращение раньше кинет ReferenceError.
console.log(a); // undefined
var a = 1;

console.log(b); // ReferenceError
let b = 2;

Переприсваивание и повторное объявление

  • var — можно переприсваивать и повторно объявлять.
  • let — можно переприсваивать, нельзя повторно объявлять в том же скоупе.
  • const — нельзя переприсваивать ссылку и нужно сразу инициализировать.

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

const user = { name: 'Ann' };
user.name = 'Bob'; // ок — меняем поле
user = {};         // TypeError — меняем ссылку

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

По умолчанию const, let — когда значение переприсваивается, var — практически никогда (legacy).

Коротко для собеседования

var — функциональная область и hoisting в undefined; let/const — блочная область и TDZ. const запрещает переприсваивание ссылки. Современный код: const по умолчанию, let при необходимости.

Другие вопросы раздела