ES6: Разлика между Var, Let и Const с примери

В тази статия, var, let и const ще бъдат обсъдени по отношение на техния обхват и повдигане.

Var:

Операторът Var декларира променлива. Променливите са контейнери за съхраняване на всякаква информация.

Обхват:

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

var променливите могат да бъдат декларирани и актуализирани.
функция x () {
  y = 1;
  var z = 2;
}

х();

console.log (у); // 1, Тъй като y е недекларирана променлива, която винаги е глобална.
console.log (Z); // Хвърля референтна грешка: z не е дефинирано извън x, тъй като z е ограничен в контекста на изпълнение, в който е деклариран

В горната функция y = 1 е просто присвояване на свойство. Първо се опитва да разреши y спрямо обхвата на веригата. Ако го намери навсякъде във веригата на обхвата, той изпълнява задание; ако не намери y, само тогава създава свойство y на глобален обект (което е обект от най-високо ниво във веригата на обхвата).

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

Подемно:

Хостингът е механизъм на JavaScript, при който променливите и декларациите за функции се преместват в горната част на техния обхват преди изпълнението на код. Това означава:

console.log (myName);
var myName = 'xyz';

когато Javascript се компилира, var myName ще се премести в горната част на своя обхват. Но, важно е да се отбележи това

единственото нещо, което се премества в горната част са декларациите на променливата, а не действителната стойност, дадена на променливата.

Ето защо console.log може да изведе „undefined“, защото разпознава, че променливата myName съществува, но myName не е получил стойност до третия ред.

var myName;
console.log (myName); // Недефинирано
myName = 'xyz';

Позволявам:

нека позволява да се декларират променливи, които са ограничени по обхват до блока, израза или израза, върху който се използват. Това е за разлика от ключовата дума var, която дефинира променлива глобално или локално на цяла функция, независимо от обхвата на блока.

Обхват:

нека е блок обхват. Тя може да бъде актуализирана, но не декларирана отново в същия обхват.
ако е вярно) {
  нека foo = "abc";
  нека foo; // SyntaxError хвърлен Повторното деклариране не е позволено.
}
-------------------------------------------------- -------
ако е вярно) {
  нека foo = "abc";
}
console.log (foo); // ReferenceError: foo не е дефиниран. foo е обхват на блока
-------------------------------------------------- -------
нека foo = "abc";
ако е вярно) {
  нека foo = "xyz";
}
console.log (foo); // абс. Променливите се декларират в различен обхват

Подемно:

Точно като var, нека декларациите са подкачени към върха. За разлика от var, който се инициализира като неопределен, ключовата дума let не се инициализира. Така че ако се опитате да използвате променлива let преди деклариране, ще получите референтна грешка.

ако е вярно) {
    console.log (myName);
    нека myName = 'abc'; // Грешка в препратката
}

строителство:

Ключовата дума const не позволява да се използва повторно име на променлива навсякъде във вашия код.

Обхват:

декларациите за const са обхванати от блок. Тя не може да бъде актуализирана или повторно декларирана. Той трябва да бъде инициализиран в момента на деклариране.
ако е вярно) {
  const foo = "abc";
  foo = "xyz"; // Присвояване на постоянна променлива. Не може да се актуализира
}
-------------------------------------------------- -------
ако е вярно) {
  const foo = "abc";
}
console.log (foo); // ReferenceError: foo не е дефиниран. foo е обхват на блока
-------------------------------------------------- -------
const foo = "abc";
ако е вярно) {
   const foo = "xyz";
}
console.log (foo); // абс. Променливите се декларират в различен обхват

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

Подемно:

Както нека, декларациите за const се повдигат на върха, но не се инициализират. Тук ключовата дума const се декларира най-отгоре в обхвата, но не се инициализира с Undefined.

ако е вярно) {
    console.log (myName);
    const myName = 'abc'; // Грешка при справка
}

Моля, оставете вашите коментари.

Разгледайте поредицата:

  • Обхват и контекст на изпълнение в Javascript
  • Повдигане Демистифицирано с популярни въпроси за интервю
  • Затваряния на Javascript

Моля, публикувайте всякакви отзиви, въпроси или заявки за теми. Ако тази публикация е била полезна, моля, щракнете върху бутон бутона няколко пъти, за да покажете вашата подкрепа.

Източници: