Javascript-Heben und globale Geltungsbereichserklärung

Aug 21 2020

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

1 AbhishekJain Aug 21 2020 at 14:19

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.

1 Quentin Aug 21 2020 at 14:12

Implizite Globals nicht implizieren eine varAussage. Es gibt kein Heben von ihnen.