Рекомендуетсяjavascripttypescript

Привязки const и let

Используй const для привязки, которую не переназначают, и let для действительного переназначения.

Опубликовано Проверено Изменено

Плохо

export function renameUser(user) {
  const CURRENT_USER = user; // имя выбрано только из-за const
  CURRENT_USER.name = 'Новое имя'; // объект вызывающего кода изменен
  return CURRENT_USER;
}

Хорошо

export const DEFAULT_TIMEOUT_MS = 5000;
export function renameUser(user, name) {
  const updatedUser = { ...user, name };
  return updatedUser;
}

Почему это важно

Привязка, семантическая константа и неизменяемые данные — разные свойства. Их смешение скрывает мутацию и создает бессмысленный UPPERCASE.

Когда применять

Для JS/TS. Пример показывает копирование верхнего уровня и не гарантирует независимость вложенных объектов. Для горячего алгоритма допустима контролируемая мутация принадлежащих ему данных; правило не требует всегда копировать все структуры.

Подробные условия

const не делает объект или массив неизменяемым: их свойства могут меняться. Если нужна неизменяемость, выбери соответствующий контракт владения, readonly-проверку типов или runtime-защиту с учетом ее глубины; не обещай deep immutability от одного ключевого слова.

Обычная const-переменная остается camelCase. UPPER_SNAKE_CASE допускается для именованных констант уровня модуля с устойчивым значением/назначением по соглашению проекта, например DEFAULT_TIMEOUT_MS. Полученный пользователь, результат запроса и callback не становятся такой константой только из-за const.

Кто что делает

Человек

Определяет владение данными и область допустимой мутации.

AI-агент

Отделяет запрет переназначения от неизменяемости объекта и не делает все const-имена прописными.

Как проверить у себя

  • Привязка не переназначается → объявить → const с обычным camelCase.
  • Переименовать пользователя через пример → сравнить → возвращен новый объект, исходное name сохранено.
  • В объекте есть вложенный объект → изменить его после shallow copy → обнаружена общая ссылка; deep immutability не заявлена.
Первоисточники
История изменений на GitHub

Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.