Каква е разликата между let, const и var?

Каква е разликата между let, const и var?
Photo by Joan Gamell / Unsplash

В 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.