Sind Sie jemals auf eine Situation gestoßen, in der eine globale Variable unerwartet einen undefinierten Wert in JavaScript zurückgibt? Betrachten Sie dieses verwirrende Beispiel:
var value = 10; function test() { //A console.log(value); var value = 20; //B console.log(value); } test();
Die Ausgabe dieses Codes überrascht viele:
undefined 20
Warum die globale Variable undefiniert ist
Die Die Ursache dieses Rätsels liegt in einem grundlegenden Konzept von JavaScript, das als variables Heben bekannt ist. Wenn die JavaScript-Engine interpretiert Code durchsucht es zunächst den gesamten Codeblock und „hievt“ alle Variablendeklarationen nach oben. Es werden jedoch nur die Deklarationen gehisst, nicht die Zuweisung.
Im obigen Beispiel wird bei der Ausführung des Funktionstests zu keinem Zeitpunkt auf den globalen Variablenwert zugegriffen. Stattdessen wird ein neuer lokaler Variablenwert deklariert und zugewiesen. Diese lokale Variable überschattet die globale Variable, was zu einem undefinierten Wert für den Aufruf von console.log(value) an Punkt A führt.
Erklärung
Um dies weiter zu veranschaulichen: Schreiben wir den Code so um, als ob das Hochziehen stattgefunden hätte:
// Variable declarations hoisted to the top of the function var value = undefined; var value = 20; function test() { //A console.log(value); //B console.log(value); }
Jetzt ist klar, warum der erste console.log-Aufruf zurückkehrt undefiniert. Der lokale Variablenwert wurde noch nicht zugewiesen.
Ein weiteres Beispiel
Um das Konzept des Hebens hervorzuheben, betrachten Sie den folgenden Code:
var test = 'start'; function end() { test = 'end'; var test = 'local'; } end(); alert(test);
Dieser Code alarmiert den Wert „Start“, nicht „Ende“ oder „Lokal“. Dies liegt daran, dass der Variablentest an den Anfang der Endfunktion gehoben wurde und die globale Variable überschattet.
Funktionen werden ebenfalls gehoben
Das Hochziehen gilt nicht nur für Variablen, sondern auch für Variablen auch auf Funktionen. Der folgende Code veranschaulicht dies:
test("Won't work!"); test = function(text) { alert(text); }
Dieser Code löst einen Referenzfehler aus, da beim Aufruf von test("Funktioniert nicht!") die Testvariable deklariert, aber nicht der Funktion zugewiesen wurde. Nur die richtige Funktionsdeklarationssyntax gewährleistet ein vollständiges Hochziehen.
Das obige ist der detaillierte Inhalt vonWarum ist meine globale Variable in JavaScript undefiniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!