Они отличаются тремя способами: областью видимости (scope), поведением hoisting и возможностью переназначения.
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
Они отличаются тремя способами: областью видимости (scope), поведением hoisting и возможностью переназначения.
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var имеет область видимости функции (function-scoped), поднимается (hoisted) и инициализируется как undefined, и может быть переобъявлен. Это вызывает неожиданные утечки — избегайте его.let имеет область видимости блока ({ }), может быть переназначен и находится в temporal dead zone до строки его объявления (попытка доступа до этого вызывает ошибку).const имеет область видимости блока и не может быть переназначен — но помните, что константной является привязка, не само значение:const user = { name: "Ann" };
user.name = "Bob"; // ✅ allowed — mutating the object, not reassigning
user = {}; // ❌ TypeError — can't rebind `user`
По умолчанию используйте const; переходите на let только когда необходимо переназначение; никогда не используйте var в новом коде. Это делает намерение явным («это не изменится») и избегает утечек области видимости и путаницы с hoisting, которые приносит var.