Разница между var, let и const

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

На первый взгляд кажется, что они делают одно и то же — создают переменные. Но на практике различия между ними сильно влияют на поведение кода, читаемость и количество ошибок.

Разберёмся, в чём разница.

Что такое var

var — старый способ объявления переменных, который использовался до стандарта ES6 (2015).

var name = "Alex";

Главная особенность varфункциональная область видимости.

Это значит, что переменная доступна внутри всей функции, даже если объявлена внутри блока.

function test() {
  if (true) {
    var message = "Hello";
  }

  console.log(message); // Hello
}

Хотя переменная объявлена внутри if, она видна за его пределами.

Это часто приводит к неожиданному поведению.

Что такое let

let появился в ES6 как более безопасная альтернатива var.

let age = 25;

Главное отличие — блочная область видимости.

Переменная существует только внутри блока {}.

if (true) {
  let city = "Paris";
}

console.log(city); // Error

Здесь переменная недоступна вне блока.

Это делает код более предсказуемым.

Что такое const

const тоже появился в ES6.

const PI = 3.14;

Как и let, он имеет блочную область видимости.

Но есть важное отличие:

значение нельзя переназначить.

const name = "John";
name = "Mike"; // Error

После объявления переменная остаётся привязанной к тому же значению.

Важное заблуждение про const

Многие думают, что const делает значение полностью неизменяемым.

Это не так.

Если переменная хранит объект или массив, можно изменять их содержимое.

const user = {
  name: "Alex"
};

user.name = "Bob"; // Работает

Нельзя только переприсвоить сам объект.

user = {}; // Error

То есть const защищает ссылку, а не содержимое.

Hoisting (поднятие)

Все три варианта участвуют в hoisting, но по-разному.

var

Переменная поднимается и инициализируется undefined.

console.log(a); // undefined
var a = 5;

JavaScript интерпретирует это примерно так:

var a;
console.log(a);
a = 5;

let и const

Тоже поднимаются, но попадают в Temporal Dead Zone (TDZ).

console.log(a); // Error
let a = 5;

Использовать их до объявления нельзя.

Это защищает от ошибок.

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

var

Разрешает повторное объявление.

var x = 1;
var x = 2;

Это может создавать баги.

let

Не разрешает.

let x = 1;
let x = 2; // Error

const

Тоже не разрешает.

const x = 1;
const x = 2; // Error

Краткое сравнение

Свойство var let const
Область видимости функция блок блок
Повторное объявление да нет нет
Переназначение да да нет
Hoisting да (undefined) да (TDZ) да (TDZ)

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

Современный подход:

  • используйте const по умолчанию;
  • используйте let, если значение должно меняться;
  • избегайте var в новом коде.

Пример хорошей практики:

const API_URL = "https://api.example.com";
let counter = 0;

Так код становится понятнее и безопаснее.

var, let и const могут выглядеть похожими, но работают по-разному.

Если коротко:

  • var — старый и менее безопасный способ;
  • let — для изменяемых переменных;
  • const — для неизменяемых ссылок и более предсказуемого кода.

Понимание этой разницы — важный шаг к тому, чтобы писать чистый и надёжный JavaScript-код.