ПЕРЕМЕННЫЕ В JAVASCRIPT

LET, CONST И VAR

Переменные в JavaScript

Переменные в JavaScript

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

Три способа объявить переменную

В современном JavaScript используются const и let. var остался в старом коде и в новых проектах не нужен — ниже объясню почему.

const name = "Сергей";
let count = 0;
count = count + 1; // можно

const против let

const запрещает переприсваивание, let разрешает. Правило простое: по умолчанию пишите const, а на let меняйте только тогда, когда значение действительно меняется — счётчик цикла, аккумулятор, результат поиска.

Важно: const не делает объект неизменяемым. Ссылку переписать нельзя, а содержимое — можно:

const user = { name: "Анна" };
user.name = "Мария"; // работает
user = {}; // ошибка

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

let и const видны только внутри блока, где объявлены — в фигурных скобках:

if (true) {
  let local = 1;
}
console.log(local); // ReferenceError

var игнорирует блок и виден во всей функции. Из-за этого переменная из цикла «протекает» наружу, и ошибку потом ищут часами.

Поднятие (hoisting)

var поднимается в начало функции и на момент обращения равен undefined. let и const тоже поднимаются, но до объявления находятся в «мёртвой зоне» и дают ReferenceError — это лучше, потому что ошибка видна сразу, а не превращается в тихий undefined.

Типы значений

  • Примитивы — строка, число, булево, null, undefined, symbol, bigint. Копируются по значению.
  • Объекты и массивы — копируются по ссылке. Две переменные могут указывать на один объект.
  • Проверить тип: typeof value. Для массивов используйте Array.isArray().

Копирование объектов

Чтобы получить независимую копию, используют оператор расширения. Но он делает поверхностную копию: вложенные объекты остаются общими.

const copy = { ...user, age: 30 };
const arr2 = [...arr];

Для глубокого копирования — structuredClone(obj) в современных браузерах.

Частые ошибки

  • Объявление через var по привычке. Теряется блочная область видимости, появляются случайные глобальные переменные.
  • Уверенность, что const защищает объект. Защищает только ссылку.
  • Мутация при копировании. const copy = user — это не копия, а второе имя того же объекта.
  • Неявные глобальные переменные. Присваивание без объявления создаёт переменную в глобальной области и ломает изоляцию.

Нужен сайт, а не статья?

Напишу фронтенд без лишних зависимостей: интерактив, формы, запросы к API. С 2009 года, по договору, с поддержкой после запуска.

ОБСУДИТЬ ПРОЕКТ

Полезно по теме: JavaScript с нуля, про React, примеры HTML.