Podnoszenie JavaScript i globalna deklaracja zakresu

Aug 21 2020

W javascript faza kompilacji znajduje i kojarzy wszystkie deklaracje z ich odpowiednimi zakresami.

PRZYPADEK 1

a = 2;
console.log(a);

Jeśli nie jest używany w trybie ścisłym, zakłada się, że fragment jest faktycznie przetwarzany jako:

var a;
a = 2;
console.log(a);

Wyjście: 2

CASE2

jeśli deklaracja dzieje się poniżej console.log ()

  console.log(a); 
  var a = 2;

Tutaj w linii 1: kompilator sprawdzi deklarację a w swoim zakresie, jeśli nie zostanie znaleziony, zakres globalny przypisze jeden i ten sam kod zostanie ponownie przyjęty tak samo jak

   var a; 
   console.log(a);
   a = 2;

Wyjście: niezdefiniowane // ponieważ żadna wartość nie jest przypisywana podczas odczytywania konsoli przez interpreter

CASE3

 console.log(a); 
 a = 2;

Wyjście: RefErr

Dlaczego to zgłasza błąd odwołania i nie jest niezdefiniowane?

Odpowiedzi

1 AbhishekJain Aug 21 2020 at 14:19

Jeśli dokładnie przyjrzysz się dwóm pierwszym przypadkom, zawsze deklarujesz zmienną a, aw JavaScript tylko deklaracje są podnoszone.

To powiedziawszy, w twojej Case 3zmiennej anigdy nie deklaruje się, stąd podnoszenie nie jest tutaj możliwe. Z tym, nie ma zmienną o nazwie aw zakresie, a zatem ReferenceError.

Jeśli spojrzysz na opis ReferenceError , to brzmi:

Obiekt ReferenceError reprezentuje błąd, gdy występuje odwołanie do nieistniejącej zmiennej.

1 Quentin Aug 21 2020 at 14:12

Niejawne wartości globalne nie implikują varinstrukcji. Nie ma ich podnoszenia.