Was dieses Problem verursacht hat, ist das Ergebnis des Ausführens eines JS -Programms:
Die Codekopie lautet wie folgt:
var i = 0;
Funktion a () {
für (i = 0; i <20; i ++) {
}
}
Funktion b () {
für (i = 0; i <3; i ++) {
A();
}
kehre I zurück;
}
var result = b ();
Das Ergebnis dieses Programms ist Ergebnis = 21;
Aus diesem Programm können wir erkennen, dass es kein Problem gibt, dass der Wert von I 20 liegt, wenn die Funktion A zurückgibt.
Wenn die B -Funktion zurückgibt, lohnt es sich, zu diskutieren, ob der Wert von I 20 oder 21 liegt.
Die Essenz des Problems lautet: Bestimmen Sie zuerst, ob ich <3 oder i ++ zuerst durchgeführt wird, und dann bestimmen Sie, ob ich <3.
Nach den Ausführungsergebnissen ist ersichtlich, dass I ++ zuerst ausgeführt wurde.
Die Codekopie lautet wie folgt:
Funktion a () {
für (i = 0; i <20; i ++) {
// no var i
// Das Ich hier ist die globale Variable, auf die jeder zugreifen kann
}
}
Funktion b () {
für (i = 0; i <3; i ++) {
// alarm (i); // In ähnlicher Weise ist ich hier auch eine globale Variable, die 0 zurückgibt und nur einmal zurückkehrt
a (); // Diese Funktion gibt i = 20 zurück
// Wenn i = 20 i ++ und i = 21 passt, entspricht es nicht die Bedingungen von i <3 und beenden direkt. Also kehren Sie I = 21 zurück, das ist normal!
}
kehre I zurück;
}
var result = b ();
Hier vervollständigen wir die Ausführungsreihenfolge der for -Schleife:
Das folgende Programm ist ein Beispiel
Die Codekopie lautet wie folgt:
für (int i = 0; i <10; i ++)
{
}
Zuerst i = 0; i <10; und dann die erste Runde des Schleifenkörpers durchführen
Dann führen Sie aus: i ++, i <10; Führen Sie dann die zweite Runde des Schleifenkörpers aus
Bis zum letzten i ++ nach i> = 10 endet die Schleife.
Im Augenblick
Anweisung 1 wird vor Beginn des Schleifenblocks ausgeführt
Anweisung 2 definiert die Bedingungen für das Ausführen einer Schleife (Codeblock)
Anweisung 3 wird ausgeführt, nachdem die Schleife (Codeblock) ausgeführt wurde