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

Чем отличаются типы переменных и как это влияет на код?

Основы языка

Переменные различаются способом объявления (`var`/`let`/`const`) — по области видимости, hoisting и изменяемости — и типом хранимого значения (примитив или ссылка).

По способу объявления

  • var — функциональная область, hoisting в undefined, переобъявление разрешено (legacy).
  • let — блочная область, TDZ, переприсваивание разрешено.
  • const — блочная область, TDZ, переприсваивание ссылки запрещено.
if (true) {
  var a = 1;   // видна во всей функции
  let b = 2;   // только в блоке
}
console.log(a); // 1
console.log(b); // ReferenceError

По типу значения

  • Примитивы — по значению, иммутабельны, копия независима.
  • Ссылочные (объекты) — по ссылке, копия делит объект.
let x = { v: 1 };
let y = x;    // общая ссылка
y.v = 9;
x.v;          // 9

Как это влияет на код

  • var порождает утечки из блоков и баги hoisting → используют let/const.
  • const защищает ссылку, но не содержимое объекта.
  • Ссылочные переменные требуют клонирования для независимой копии.

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

Переменные различаются объявлением (var — функциональная область/hoisting, let/const — блочная/TDZ, const без переприсваивания) и типом значения (примитив по значению vs объект по ссылке). Это влияет на области видимости, баги hoisting и копирование данных.

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