2012-06-26 11 views
7

Ich könnte ein bisschen dicker hier sein, aber bitte antworte mir dies. Betrachten Sie den folgenden Code ein:Verwirrt über While-Schleife in Javascript

a=1; 
while(a<=6) { 
    console.log(a); 
    a++; 
} 

Wenn ich dies laufe ich Werte in der Konsole von 1 bis 6, und dann eine andere 6.

nun auf aussehen:

a=1; 
while(a<=6) { 
    console.log(a); 
    ++a; 
} 

Ausführen dieses bekomme jetzt die Werte von 1 bis 7.

Warum passiert das? Mein Verständnis war, dass der Anweisungsblock nur ausgeführt würde, wenn der Ausdruck wahr ist. Wie kann das im zweiten meiner Beispiele möglich sein? Und warum erscheint 6 zweimal in der ersten? Sehr verwirrend für mich.

Wenn Sie einfach erklären können (ich lerne immer noch), wäre das großartig.

+0

können Sie den vollständigen Code anzeigen, da ++ a; und a ++; sind gleich, wenn sie eine individuelle Aussage sind und nicht mit einer anderen Aussage verbunden sind. –

+0

Dies ist der vollständige Code - ich verwende ein Beispiel aus einem Buch und versuche zu verstehen, was vor sich geht. Ich teste es mit den Konsolenfenstern von Firefox und Chrome. Die Ergebnisse sind in beiden Fällen gleich. –

+2

Das zweite Beispiel druckt 1 bis 6 -> http://jsfiddle.net/USYSH/ – ManseUK

Antwort

13

Die Konsole druckt für Sie den Wert der zuletzt ausgewerteten Anweisung aus. Im zweiten Fall wird die Vorinkrementierung durchgeführt, so dass der Wert 7 und nicht 6 wie im ersten Fall ist.

Ändern Sie console.log() Anruf mehr Material zu drucken, und es wird klar sein:

console.log("a is: " + a); 

Sie nicht, dass die Vorsilbe in der letzten Zeile sehen.

+1

Das ergibt für mich überhaupt keinen Sinn. Wenn der Wert 7 ist, warum kommt es dann über die Anfangsbedingung hinaus (dh a <= 6) ... das sollte meiner Meinung nach nicht passieren. –

+2

Es geht nicht über den Ausgangszustand hinaus. Es passiert einfach, dass die zuletzt ausgeführte Anweisung '++ a;' ist, so dass sie von der Konsole "kostenlos" ausgedruckt wird. – Pointy

+1

@Romil Sorry, aber diese Aussage ist falsch. Im Kontext der JavaScript-Konsole des Browsers, die immer den Ergebniswert der Anweisung ausgibt, sind sie nicht identisch. Probieren Sie es jetzt selbst aus Ihrem Browser aus. – Pointy

2

In beiden Fällen sehen Sie eine zusätzliche Ziffer, da die Konsole das Ergebnis der letzten Anweisung in der Schleife ausgibt.

Wenn dieser Code nicht direkt in der Konsole ausgeführt wird, sehen Sie nicht, was eine zusätzliche Ziffer zu sein scheint.

+0

' while' Statements haben kein "result". –

+0

true, aber im Kontext der Konsole wird es die letzte Anweisung ausgeben – tybro0103

0

Siehe die fiddle mit ihrer Antwort. Beide geben 1 bis 6.

einem ++: es den Wert von einer vor Schritt zurückkehrt.

++ a: Es gibt den Wert ein nach Inkrement.

Loops führt bis der Wert von ‚a‘ < = 6.

Wenn Sie beliebigen Code auf der Konsole ausführen, es auswertet den Variablenwert und druckt seinen Wert auch deshalb, Sie werden immer eine mehr 6 und 7 in der Ausgabe.

Keine Sorge, wenn Sie diesen Code ausführen, erhalten nur die 1-6 Werte.

+0

Wahrscheinlich sollte die Kommentare lesen. OP fragt nach der beobachteten Ausgabe in der "Konsole", die normalerweise "7" für das zweite Codebeispiel enthält. –

+1

Bitte überprüfen Sie die http://jsfiddle.net/eqA8t/. Ich habe auch in der Konsole eingecheckt .. Es gibt nur 6 zurück. :) :) –

+0

Was das JSFiddle zeigt, spielt keine Rolle, denn das ist nicht das, wonach OP fragt. Wenn Sie den Code direkt in die Konsole eingeben, enthält er normalerweise die '7'. * (Ich sage "normalerweise", weil es da draußen vielleicht eine Konsole gibt, die das nicht tut.) * Die Frage war nicht ganz klar, aber die Kommentare klärten auf. –