Каква е разликата между let, const и var?
В JavaScript, let и const са ключови думи за деклариране на променливи, но имат различни свойства.
let
let създава променлива, която може да бъде променяна:
let x = 10;
x = 20; // можем да променяме стойността на x
console.log(x); // 20
let декларира променлива, която може да бъде присвоена и променена по всяко време.
const
const създава променлива, която не може да бъде променена след декларирането:
const y = 10;
y = 20; // не можем да променяме стойността на y
console.log(y); // 10
const декларира константа, която не може да бъде променена след като е декларирана.
Ето още няколко примера:
let x = 10;
if (x === 10) {
let x = 20;
console.log(x); // 20
}
console.log(x); // 10
const PI = 3.14;
// PI = 3; // грешка: не можем да променяме стойността на PI
console.log(PI); // 3.14
В горния пример let x = 20; е декларирана в блока на if оператора, така че тя има предимство пред x = 10; декларираната извън блока. Вторият console.log(x); отпечатва стойността на глобалната променлива x.
Във втория пример, const PI = 3.14; декларира константа, която не може да бъде променена след като е декларирана. Опитът да се промени стойността на PI ще доведе до грешка.
var
var също е ключова дума за деклариране на променливи в JavaScript, но има някои особености, които я правят различна от let и const.
Променливата, декларирана с var, е видима в цялата функция, в която е декларирана. Ако е декларирана извън функция, то тя става глобална за целия скрипт.
function myFunction() {
var x = 10;
console.log(x);
}
myFunction(); // 10
console.log(x); // грешка
В горния пример променливата x, декларирана с var, е видима само в функцията myFunction(). Опитът да се достъпи тази променлива извън функцията ще доведе до грешка.
var има функционална област на видимост, докато let и const имат блокова област на видимост. Това означава, че променливата, декларирана с let или const, е видима само в блока, в който е декларирана.
Когато се декларира променлива с var, тя се повдига (hoisted) най-горе в обхвата на своята функция или глобален обхват. Това означава, че декларираната променлива е налична дори преди да бъде декларирана.
console.log(x); // undefined
var x = 10;
В горния пример, декларираме променливата x с var, но я използваме преди да бъде декларирана. В реалността, променливата x е "повдигната" най-горе в обхвата на своята функция или глобален обхват и е налична, но без присвоена стойност (undefined), преди да бъде декларирана.
Въвеждането на let и const в ES6 има за цел да реши някои проблеми с var, като замества функционалната област на видимост на var с блокова област на видимост и премахва характерист
var продължава да бъде наличен в ES6 и следващите версии на JavaScript, но с въвеждането на let и const в ES6, предпочитането на var за деклариране на променливи се намали значително.
let и const се използват широко, особено let, защото позволяват деклариране на променливи с блокова област на видимост и предотвратяват проблеми, свързани с повдигането (hoisting) на var.
Въпреки това, var продължава да има приложения, особено за глобални променливи или в случаи, когато е нужно да се създават променливи с функционална област на видимост. Например, ако се използва var във функция, може да се получи достъп до нея от други функции, които са дефинирани в същата функция. Така че, в някои случаи, var може да е полезен инструмент за деклариране на променливи в JavaScript.