С въвеждането на синтаксиса на ES 6 един от най-честите въпроси, които възникват, е разликата между Const, Let и Var. Въпреки че изглежда просто, има още нещо, което прави огромна разлика в основите на Javascript. Променливите са контейнери за всички типове данни, примитивни и непримитивни. Преди да се задълбочим в разликите, е важно да знаем разликите между декларация, инициализация, присвояване на променливи, обхвати и повдигане.

Декларация е, когато променлива е регистрирана с дадено име в съответния обхват. След това се инициализира, където се разпределя памет за съхраняване на променливата, където е недефинирана. Присвояванетосе случва, когато е дефинирано към тип данни.

var Hello //=> undefined (Declaration and Initialization)
Hello = "Hello World" //=> "Hello World" (Assignment)

Обхват е мястото, където променливите и функциите са достъпни в приложението ви. В програмирането има лексикален обхват срещу динамичен обхват. Вероятно ще вляза в това в бъдещ блог. В Javascript, лексикален, има много обхвати като глобален, функционален, блоков и локален. И накрая, повдигане е стойността или поведението по подразбиране на декларираната променлива. В Javascript, ако дадена променлива е декларирана и инициализирана, без да бъде присвоена, тя е недефинирана.

Вар.

Преди въвеждането на ES6, var беше начинът за деклариране на променливи. Var е с функционален обхват и понякога е глобален, ако е дефиниран извън контекста на функция; но не и блоков обхват. Променливата, декларирана във функция, е достъпна само в рамките на тази функция или във всички функции, вложени в нея. Ако се опитате да получите достъп до променлива във функция, ще получите Uncaught Reference Error.

sayHello = () => {
    var hello = "hello world"
    return hello 
}
console.log(hello) //=> "Uncaught ReferenceError: hello is not defined"

Нека

Нека, за разлика от var е блокиран обхват и може да се декларира само локално. Ако е деклариран извън функцията, може да бъде достъпен глобално; но ако е в рамките на функция, може да бъде достъпен само ако извикате тази функция. След като една променлива е декларирана и присвоена с помощта на „let“, тя може да бъде присвоена отново, но не може да бъде предекларирана. Ще получите Синтактична грешка.

let apples = "apples"
apples = "oranges"
let apples = "oranges //=> SyntaxError: Identifier 'apples' has already been declared

Конст

Const също е блокиран обхват. Когато нещо е декларирано с помощта на const, то не може да бъде декларирано отново и ще получите грешка при типа. Използва се само когато дадена стойност не трябва да се променя.

const apples = "apples"
apples = "oranges" //=> TypeError: Assignment to constant variable

Той се държи различно, когато обектите са декларирани с const. Въпреки че обектът не може да бъде преназначен, стойностите в него могат.

const location = {
   country: "US",
   city: "New York"
}
location = {
   country: "China",
   city: "Hong Kong"
} //=> TypeError: Assignment to constant variable
location.country = "China"
location = {country: "China", city: "New York}

Защо да използвате Const и Let over Var?

Една от основните разлики, поради които Const и Let се предпочитат пред Var, е, че те са по-малко податливи на грешки поради ограничения обхват. Освен това го прави много по-четлив, когато се споделя с други разработчици. Използвайте Const само когато знаете, че променливата не трябва да се променя.