Если вы изучаете JavaScript, то рано или поздно сталкиваетесь с тремя способами объявления переменных: var, let и const.
На первый взгляд кажется, что они делают одно и то же — создают переменные. Но на практике различия между ними сильно влияют на поведение кода, читаемость и количество ошибок.
Разберёмся, в чём разница.
varvar — старый способ объявления переменных, который использовался до стандарта ES6 (2015).
var name = "Alex";
Главная особенность var — функциональная область видимости.
Это значит, что переменная доступна внутри всей функции, даже если объявлена внутри блока.
function test() {
if (true) {
var message = "Hello";
}
console.log(message); // Hello
}
Хотя переменная объявлена внутри if, она видна за его пределами.
Это часто приводит к неожиданному поведению.
letlet появился в ES6 как более безопасная альтернатива var.
let age = 25;
Главное отличие — блочная область видимости.
Переменная существует только внутри блока {}.
if (true) {
let city = "Paris";
}
console.log(city); // Error
Здесь переменная недоступна вне блока.
Это делает код более предсказуемым.
constconst тоже появился в 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, но по-разному.
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-код.