Чтобы понять разницу ключевых слов var, let и const, необходимо разобраться с тем, что такое область видимости.
<aside> 👉 Область видимости – это зона, в которой переменные доступны, то есть в которой мы к этим переменным можем обратиться. Есть 3 вида области видимости: глобальная, функциональная и блочная.
</aside>
Пример:
// Глобальная
console.log('1');
function exampleFunc() {
// Функциональная
console.log('2');
}
if (true) {
// Блочная
console.log('3');
console.log('4');
console.log('5');
}
for (let i = 0; i < 10; i++) {
// Блочная
console.log('6');
console.log('7');
console.log('8');
}
<aside> 👉 Глобальная – это самая внешняя область. Когда мы создаём переменные просто в JS-файле, подключенном к HTML, мы создаём их в глобальной области видимости
</aside>
Противопоставляются ей функциональная и блочная область видимости – это меньшие, локальные области.
<aside> 👉 Функциональная – это область внутри функции
</aside>
<aside>
👉 Блочная – внутри блока с фигурными скобками: например, внутри цикла for , while или блока if/else
</aside>
Внутри области видимости мы можем видеть переменные из этой области + переменные из родительской области видимости. То есть если переменная создаётся в глобальной области видимости, то она также всегда будет доступна и в функциональной области.
Наоборот это не работает: у родительских областей нет доступа к дочерним. Поэтому переменную, созданную внутри функции, мы не сможем использовать за её пределами.
var<aside>
❗ У var функциональная область видимости
</aside>
Это является корнем всех проблем с переменными, созданными через var.
Всего есть 3 проблемы: