Каква е разликата между 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.