Wenn Sie den laufenden Mechanismus der JavaScript-Sprache nicht verstehen oder einfach nur ausgedrückt haben, können Sie die Ausführungsreihenfolge von JavaScript nicht beherrschen, dann sind Sie wie ein Boler, der ein Pferdtausend-Meilen-Pferd nicht kontrollieren kann, und erlaubt dem Tausend-Meilen-Pferd, zu entkommen und zu rennen um.
Wie analysiert JavaScript? Was ist seine Ausführungsreihenfolge? Bevor wir diese verstehen, verstehen wir zunächst einige wichtige Begriffe:
1. Codeblock
Ein Codeblock in JavaScript bezieht sich auf ein Codesegment, das durch das <Skript> -Tag geteilt wird. Zum Beispiel:
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
alarm ("Dies ist Code Block eins");
</script>
<script type = "text/javaScript">
alarm ("Dies ist Code Block zwei");
</script>
JS wird gemäß den Codeblöcken zusammengestellt und ausgeführt. Was bedeutet es zum Beispiel?
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
ALERT (STR); // Da Str nicht definiert ist, hat der Browser einen Fehler und der folgende kann nicht ausgeführt werden
alarm ("Ich bin Code Block eins"); // hier nicht ausführen
var test = "Ich bin eine Codeblockvariable";
</script>
<script type = "text/javaScript">
ALERT ("Ich bin Code Block zwei");
ALERT (Test);
</script>
Im obigen Code wird in Code Block 1 ein Fehler gemeldet, aber es wirkt sich nicht auf die Ausführung von Code Block zwei aus. -blockfrei.
2. Deklarative Funktionen und Zuordnungsfunktionen
Funktionsdefinitionen in JS sind in zwei Typen unterteilt: deklarative Funktionen und Zuordnungsfunktionen.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Funktion fn () {// Deklarationsfunktion
}
var fn = Funktion {// Zuweisungsfunktion
}
</script>
Der Unterschied zwischen einer deklarativen Funktion und einer Zuordnungsfunktion besteht darin, dass während der Vorkompilierungsperiode von JS die deklarative Funktion zuerst extrahiert wird und der JS -Code in der Reihenfolge ausgeführt wird.
3. Vorkompilierungszeit und Ausführungsperiode
Tatsächlich ist der Parsingprozess von JS in zwei Phasen unterteilt: Vorkompilierungszeit (Vorverarbeitung) und Ausführungszeit.
Während der Vorkompilierungszeit verarbeitet JS alle deklarierten Variablen und Funktionen in diesem Codeblock (ähnlich der Zusammenstellung von C). Es sollte jedoch beachtet werden, dass das einzige, was mit den Funktionen umgeht, deklarativ ist und die Variablen sind nur deklariert.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Fn ();
Funktion fn () {// Funktion 1
alarm ("Funktion 1 wurde ausgeführt");
}
Funktion fn () {// Funktion 2
Alert ("Funktion 2 wurde ausgeführt");
}
</script>
<script type = "text/javaScript">
FN ();
Funktion fn () {// Deklarationsfunktion
alarm ("deklarierte Funktion ausgeführt");
}
var fn = function () {// Zuweisungsfunktion
alert ("die Zuordnungsfunktion ausführen");
}
</script>
// Code Block 1
<script type = "text/javaScript">
Alert (STR); // Der Browserfehler wurde angegeben, das Informationsfenster wurde jedoch nicht angezeigt
</script>
// Code Block zwei
<script type = "text/javaScript">
ALERT (STR);
var str = "aaa";
</script>
// js deklariert die Variable während der Vorverarbeitungszeit, initialisiert und weist es jedoch nicht initialisiert und weist es zu, sodass die Variable in Code Block 2 unfugeshed ist, während die Variable in Code eins überhaupt nicht existiert, sodass der Browser einen Fehler meldet.
Nachdem Sie die oben genannten Begriffe verstanden haben, haben Sie einen groben Eindruck von dem Laufmechanismus von JS.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Fn (); // Browser -Fehler: "undefiniert"
</script>
<script type = "text/javaScript">
Funktion fn () {// Funktion 1
alarm ("Funktion 1 wurde ausgeführt");
}
</script>
Warum meldet der Browser beim Ausführen des oben genannten Code einen Fehler? Ist die Deklarationsfunktion nicht während der Vorverarbeitungszeit verarbeitet? Tatsächlich ist dies ein Missverständnis. Code.
Lassen Sie uns nun zusammenfassen und organisieren:
Die Codekopie lautet wie folgt:
Schritt 1. Lesen Sie den ersten Codeblock.
Schritt 2. Syntaxanalyse.
Schritt 3. "Vorkompilierungsverarbeitung" von VAR-Variablen und Funktionsdefinitionen (es wird niemals ein Fehler gemeldet, da nur die richtige Definition analysiert wird).
Schritt 4. Führen Sie das Codesegment aus, und wenn ein Fehler vorliegt, wird ein Fehler gemeldet (z. B. die Variable ist nicht definiert).
Schritt 5. Wenn es ein weiteres Codesegment gibt, lesen Sie das nächste Codesegment und wiederholen Sie sie Schritt 2.
Schritt6.
Gemäß der Ausführungsreihenfolge von HTML -Dokumentströmen sollte der JS -Code, der vor dem Rendern von Seitenelementen ausgeführt werden muss Im nach dem Element </body> nach dem Element wird am Ende das Onload -Ereignis des Body -Tags ausgeführt.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
Alert ("First");
Funktion fn () {
alarm ("dritter");
}
</script>
<body onload = "fn ()">
</body>
<script type = "text/javaScript">
alarm ("zweite");
</script>