Heute fragte mich ein kleiner Praktikant in der Firma den Unterschied zwischen zwei JS -Codes:
Code 1:
<script type = "text/javaScript"> var a = "Hallo"; Funktion test () {var a; Alarm (a); a = "Welt"; Alarm (a); } </script>Code 2:
<script type = "text/javaScript"> var a = "Hallo"; Funktion test () {alert (a); a = "Welt"; Alarm (a); } </script>Ich denke, es ist so einfach. Ist es nicht nur ein Umfangsproblem zwischen globalen Variablen und lokalen Variablen? Ich sagte: "Wenn die globale Variable mit der lokalen Variablen dupliziert wird, wird der Umfang der lokalen Variablen den Umfang der globalen Variablen überschreiben. Nachdem sie den Umfang der lokalen Variablen verlassen haben, kehrt sie zum Geltungsbereich der globalen Variablen zurück.
<Script> var a = 1; Funktion test () {alert (a); var a = 2; Alarm (a); } prüfen(); Alarm (a); </script>Was ist das Ergebnis gleich? Gibt es Ausgabe 1 2 1? Nun, ich dachte, bevor ich den Testfall an sie schickte, aber nach der Testausgabe ... war das Ergebnis des Laufens undefiniert 2 1.. Zu dieser Zeit war ich verwirrt und fragte Lehrer Gu, dass ich nicht viel über JS wusste, also habe ich hart gearbeitet, um + Tests zu lernen, und fasste es wie folgt zusammen:
1. Der Umfang der JavaScript -Variablen ist gemäß Methodenblöcken (dh er wird durch zwei Klammern {} der Funktion geteilt) geteilt. Denken Sie daran, es ist ein Funktionsblock und für, während und wenn Blöcke nicht die Kriterien der Bereichsabteilung sind. Sie können sich die folgenden Beispiele ansehen:
<Script> function test2 () {alert ("vor für den Umfang:"+i); // I wird kein Wert zugewiesen (nicht nicht deklariert! Verwenden Sie nicht deklarierte Variablen oder Funktionen, um einen tödlichen Fehler zu werfen und die Skriptausführung zu unterbrechen) // zu diesem Zeitpunkt wird der Wert von i für (var i = 0; i <3; i ++) {alert ("in für den Bereich"+i) untergebracht. // I ist 0, 1, 2, und wenn ich 3 ist, wird die Schleife übersprungen} alarm ("Nach Umfang:"+i); // I ist 3, beachten Sie, dass es bereits nach Umfang draußen ist, aber ich bleibt immer noch 3, während (wahr) {var j = 1; brechen; } alert (j); // j ist 1, beachten Sie, dass es bereits eingeschaltet ist, während der Wert von j bereits bei 1 ist, wenn (true) {var k = 1; } alert (k); // Der Wert von k beträgt 1. Beachten Sie, dass er bereits außerhalb des Geltungsbereichs ist, aber der Wert von k bleibt bei 1} test2 (); // Wenn (Außenfunktionsbereich) die Ausgabe der I-, J- und K -Variablen, die nur in test2 existieren, haben einen magischen Effekt? Alarm (i); //Fehler! Das ist richtig, es ist ein Fehler, da die Variable I nicht deklariert ist (nicht nicht zugewiesen, die Ausgabe der ersten Zeile der Test2 -Funktion unterscheidet), was zu einem Skriptfehler führt, und das Programm endet hier! ALERT ("Wird dieser Liniendruck noch ausgegeben?"); // keine ausgeführte Warnung (j); // keine ausgeführte Warnung (k); // nicht ausgeführt </script>2. Vor der Ausführung führt JavaScript eine vollständige Analyse des Deklarationsteils der gesamten Skriptdatei (einschließlich lokaler Variablen) durch, um den Umfang der tatsächlichen Variablen zu bestimmen. Wie versteht man? Siehe das folgende Beispiel:
<Script> var a = 1; Funktion test () {alert (a); // a ist undefiniert! Dies ist keine globale Variable, da eine doppelte lokale Variable im Funktionsbereich (die viertletzte Zeile der Funktionsbehörde) und // der globalen Variablen A erklärt wurde, die zeigt, dass JavaScript vor der Ausführung eine vollständige Analyse des Definitionsteils der gesamten Skriptdatei durchführt. Daher wird vor dem Funktionstest () // Variable A in der Funktionskörper auf die interne lokale Variable anstelle der externen globalen Variablen hingewiesen. Aber zu diesem Zeitpunkt wird A nur deklariert und hat keinen Wert zugewiesen, sodass er undefiniert ausgibt. A = 4 Alarm (a); // a ist 4, gibt es keine Spannung? Das A hier ist immer noch eine lokale Variable! var a; // Die lokale Variable A deklariert aufmerksam (a); // a ist immer noch 4, weil 4 einem vor} test () zugewiesen wurde; Alarm (a); // a ist 1, was nicht im Funktionsbereich steht, der Wert von a ist der Wert der globalen Variablen </script>3. Wenn die globale Variable mit der lokalen Variablen dupliziert wird, überschreibt der Umfang der lokalen Variablen den Umfang der globalen Variablen. Nach dem Verlassen des Umfangs der lokalen Variablen kehrt sie zum Geltungsbereich der globalen Variablen zurück. Wenn die globale Variable auf eine lokale Variable stößt, wie nutzt sie die globale Variable? Verwenden Sie Fenster.
<Script> var a = 1; Funktion test () {alert (window.a); // a ist 1, hier ist a eine globale Variable! var a = 2; // Die lokale Variable A ist in dieser Linienalarm definiert (a); // a ist 2 und ein hier ist eine lokale Variable! } prüfen(); Alarm (a); // a ist 1, es ist nicht im Funktionsbereich, der Wert von a ist der Wert der globalen Variablen </script>Für weitere Artikel finden Sie natürlich die folgenden Artikel.