Podnoszenie JavaScript i globalna deklaracja zakresu
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
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.
Niejawne wartości globalne nie implikują varinstrukcji. Nie ma ich podnoszenia.