Чем отличаются переменные var, let, const.
-
Самая главная вещь, с которых начинается каждый курс по JavaScript — но которые до сих пор путают даже опытные разработчики:
var
,let
,const
.Они все "создают переменные", но работают по-разному. Разберёмся, чем.
1.
var
var name = "Анна";
Область видимости: функциональная (а не блочная).
Это значит, чтоvar
видна внутри всей функции, даже если объявлена вif
илиfor
.if (true) { var x = 10; } console.log(x); // 10 — работает! (но это странно)
Поднятие (hoisting): переменная "всплывает" в начало области видимости, но со значением
undefined
.console.log(y); // undefined, а не ошибка var y = 5;
Можно переопределять и перезаписывать — даже случайно.
Минус: легко получить утечки, баги и непредсказуемое поведение.
2.
let
— современная замена varlet age = 25;
Область видимости: блочная (
{}
), то есть только внутриif
,for
,function
и т.п.if (true) { let z = 20; } console.log(z); // Ошибка! z не существует здесь
Тоже всплывает, но в зону "temporal dead zone" — нельзя использовать до объявления.
console.log(name); // Ошибка: Cannot access 'name' before initialization let name = "Петя";
Можно менять значение, но нельзя переобъявлять в одном блоке.
let a = 1; a = 2; // ок let a = 3; // ошибка!
Используйте
let
, если значение будет меняться.
3.
const
— для неизменяемых значенийconst PI = 3.14;
Блочная область видимости, как у
let
.Нельзя переопределять и нельзя оставлять без значения.
const user; // Ошибка: Missing initializer user = "Том";
Но!
const
не делает значение глубоко неизменяемым:const user = { name: "Лена" }; user.name = "Маша"; // ок! Объект можно менять user = {}; // ошибка! Переприсвоить нельзя
Используйте
const
по умолчанию. Если нужно менять — тогдаlet
.
Сравнение в двух строках:
Область видимости Можно менять Можно переобъявлять var
функция да да let
блок {}
да нет const
блок {}
нет* нет * — нельзя переприсвоить, но можно менять свойства объектов
Используйте
const
по умолчанию
Если нужно менять значение —
let
Забудьте про
var
(если только не поддерживаете древний код) -
E evo переместил эту тему из Языки программирования
-
-
-
-
Как привести строку к массиву
Перенесена JavaScript -
-
Все типы данных в javascript
Перенесена JavaScript -
-
© 2025 eduity.ru, Inc. Все права защищены.