Das Verhalten Sie beobachten ist, weil das ist, wie ein Browser-Konsole funktioniert.
Für jeden Code, den Sie auswerten, wird versucht, einen Wert zurückzugeben. Für triviale Ausdrücke ist es einfach - 2 + 2
würde vermutlich 4
zurückgeben.
Für Code, der aus mehreren Anweisungen besteht, ist es viel komplizierter und die Konsole versucht, intelligent zu sein. Was die Komplexität erhöht, ist die Tatsache, dass das Verhalten der Konsole nicht standardisiert ist. Das, was wir in diesem Moment für einen bestimmten Browser beobachten, kann nicht garantiert werden, dass es für einen anderen Browser oder für eine andere Version des gleichen gilt.
Lassen Sie uns versuchen, um herauszufinden, was passiert, wenn:
j = 0;
while (j < 3) {
j++;
}
für diesen Code Browser intelligent zu sein versucht und gibt den Wert des letzten Ausdrucks gefunden, die in diesem Fall ist j++;
ist. Es gibt 2
zurück, weil das der Wert von j
auf der letzten Iteration vor Schleifenbeendigung war. Und da das Postfixinkrement den aktuellen Wert zurückgibt, bevor es geändert wird, gibt es 2
zurück.
Wenn wir es
j = 0;
while (j < 3) {
++j;
}
der Ausgang 3 für den gleichen Grund wäre ändern.
Jetzt versuchen wir etwas anderes:
j = 0;
while (j < 3) {
j++;
a = 42;
}
dies würde die Ausgabe 42
. Seit dem a = 42
ist der neueste Ausdruck in diesem Code.
j = 0;
while (j < 3) {
j++;
var a = 42;
}
Für diese Probe würde es wieder 2
zurückkehren, da Konsole die Zuweisungsanweisung zu ignorieren entscheidet und auf den neuesten Ausdruck kehrt zurück.
Zusammenfassend: Dieses Verhalten ist nicht standardisiert, und Browser versuchen nur, nützlich zu sein und etwas auszugeben, auch wenn es nicht das ist, was Sie erwarten. Mein Rat wäre also, sich nicht auf die implizite Konsolenausgabe zu verlassen und die console.log()
explizit zu verwenden, wenn Sie ein Ergebnis erhalten möchten.
Ist dies der vollständige Code? Du gibst 2 irgendwann zurück, daher erscheint es. Ihre while-Schleife enthält keine Konsolenanweisungen zum Drucken auf der Konsole. –
wo ist console.log() -Anweisung in Code – virendrao
Es ist nur eine Konsole, die den Wert des letzten Ausdrucks zurückgibt. Das Verhalten ist extrem schwierig, daher ist es besser, im Moment nicht daran zu denken. – zerkms