В JavaScript
var та
let - це ключові слова, які використовуються для оголошення змінних, але вони мають кілька відмінностей у поведінці.
Область видимості
var має область видимості на рівні функції (function-scoped). Це означає, що змінні, оголошені з використанням
var, визначені в рамках функції, і не доступні за її межами.
function example() {
if (true) {
var x = 10;
console.log(x); // доступно
}
console.log(x); // доступно
}
let має блочну область видимості (block-scoped), тобто визначена в блоку коду (як, наприклад, в умовних операторах чи циклах), і не доступна за їхніми межами.
function example() {
if (true) {
let y = 20;
console.log(y); // доступно
}
console.log(y); // не доступно
}
Підняття (hoisting)
Змінні, оголошені за допомогою
var, піднімаються (hoisted) на верхню частину функції чи глобального об'єкту, тобто їх можна використовувати перед тим, як вони фактично оголошені.
console.log(a); // undefined
var a = 5;
console.log(a); // 5
Змінні, оголошені за допомогою
let, також піднімаються, але їх не можна використовувати до їхнього оголошення.
console.log(b); // ReferenceError: b is not defined
let b = 10;
console.log(b); // 10
Чому віддають перевагу let?
Блочна область видимості:
Дозволяє уникнути непередбачуваних ситуацій, коли змінні, оголошені за допомогою var, можуть використовуватися за межами блоків.
Відсутність підняття (hoisting) проблем:
Змінні, оголошені за допомогою
let, також піднімаються, але їхнє використання до оголошення видає ReferenceError. Це полегшує розуміння коду, оскільки змінні не мають значення undefined до того, як їм буде присвоєно значення.
Зменшення конфліктів імен:
Використання
let може допомогти уникнути ситуацій, коли в коді виникають конфлікти через повторне використання імен змінних. Так як
let має блочну область видимості, вона дозволяє використовувати одне ім'я для змінних в різних блоках коду без конфліктів.
Зручніші помилки в час виконання:
Використання let може призводити до більш зрозумілих помилок в час виконання коду. Наприклад, спроба використання змінної перед її оголошенням призведе до ReferenceError, що полегшує виявлення помилок.
Чистота коду:Сучасні лінтери віддають перевагу
let як більш надійному та передбачуваному варіанту оголошення змінних. Наприклад, існує лінтер (linter) для JavaScript, який називається "eslint" і має правило під назвою "no-var". Це правило призначене для виявлення використання ключового слова
var в коді та рекомендації його заміни на сучасніші ключові слова, такі як
let або
const.