Javascript-Heben und globale Geltungsbereichserklärung
In Javascript findet die Kompilierungsphase alle Deklarationen und ordnet sie den entsprechenden Bereichen zu.
FALL 1
a = 2;
console.log(a);
Wenn das Snippet nicht im strengen Modus verwendet wird, wird davon ausgegangen, dass es tatsächlich verarbeitet wird als:
var a;
a = 2;
console.log(a);
Ausgabe: 2
FALL2
wenn die Deklaration unter console.log () erfolgt
console.log(a);
var a = 2;
Hier in Zeile 1: Der Compiler prüft, ob a in seinem Gültigkeitsbereich deklariert ist, wenn er nicht gefunden wird. Der globale Gültigkeitsbereich weist einen zu und derselbe Code wird erneut als derselbe angenommen
var a;
console.log(a);
a = 2;
Ausgabe: undefiniert // da beim Lesen der Konsole des Interpreters kein Wert zugewiesen wird
FALL3
console.log(a);
a = 2;
Ausgabe: RefErr
Warum wirft dies einen Referenzfehler und ist nicht undefiniert?
Antworten
Wenn Sie sich Ihre ersten beiden Fälle genau ansehen, deklarieren Sie immer die Variable a, und in JavaScript werden nur die Deklarationen hochgezogen.
Davon abgesehen wird in Ihrer Case 3Variablen aniemals deklariert, daher ist ein Heben hier nicht möglich. Damit gibt es keine Variable mit dem Namen aim Bereich, und daher ReferenceError.
Wenn Sie sich die Beschreibung von ReferenceError ansehen , lautet sie:
Das ReferenceError-Objekt stellt einen Fehler dar, wenn auf eine nicht vorhandene Variable verwiesen wird.
Implizite Globals nicht implizieren eine varAussage. Es gibt kein Heben von ihnen.