Использование var, let и const в JavaScript

С появлением стандарта ES6 (ECMAScript 2015) в JavaScript были введены новые способы объявления переменных — let и const. До этого программисты пользовались только var. Хотя все три ключевых слова позволяют объявлять переменные, между ними есть важные различия, которые влияют на область видимости, возможность изменения и поведение при инициализации.

1. var — старый способ объявления переменных

var использовался с самого начала JavaScript. Переменные, объявленные с помощью var, обладают следующими особенностями:

  • Функциональная область видимости — переменная видна во всей функции, в которой она объявлена, или глобально, если объявлена вне функции.

  • Поднятие (hoisting) — объявления var поднимаются вверх своей области видимости. Это значит, что переменная существует до момента объявления, но имеет значение undefined.

  • Повторное объявление разрешено — одну и ту же переменную можно объявить несколько раз без ошибок.

function example() {
  console.log(a); // undefined
  var a = 10;
  console.log(a); // 10
}
example();

⚠️ Минус: из-за поднятия и отсутствия блочной области видимости var часто приводит к трудноуловимым ошибкам.

2. let — современный и безопасный способ объявления

Ключевое слово let введено в ES6 и рекомендуется к использованию в большинстве случаев.

  • Блочная область видимости — переменная видна только внутри блока { ... }, в котором она объявлена.

  • Поднятие есть, но неинициализированная область (TDZ) — переменная существует до объявления, но к ней нельзя обратиться, пока выполнение не достигнет строки объявления.

  • Повторное объявление запрещено в одной области видимости.

{
  let x = 5;
  console.log(x); // 5
}
console.log(x); // ReferenceError: x is not defined

✅ Используйте let, если значение переменной должно изменяться.

3. const — объявление констант

const также имеет блочную область видимости, но при этом:

  • Значение должно быть присвоено при объявлении.

  • Переназначение запрещено.

  • Изменение содержимого объектов и массивов возможно, если не меняется сама ссылка.

const PI = 3.14;
// PI = 3.1415; // Ошибка

const user = { name: "Alex" };
user.name = "Bob"; // Разрешено
console.log(user); // { name: "Bob" }

✅ Используйте const по умолчанию, а let — только если значение нужно изменить.

✅ Итог

  • Используйте const для большинства переменных.

  • Используйте let, когда нужно изменить значение.

  • Избегайте var, если нет необходимости поддерживать старые версии JavaScript.