2017-03-27 18 views
-5

Ich habe versucht, eine for-Schleife, die durch die Zahlen 1 - 4 erhöht und drucken, aber wenn ich den Wert von i nach der Schleife gedruckt, mein Code ausgibt 5.JavaScript - Variable in for loop erhöht

for (i = 1; i < 5; i++) { 
 
    document.write(i + "<br>"); //Outputs numbers 1 - 4 
 
} 
 

 
document.write("New i: " + i); //Outputs 5

Wie ist das möglich, wenn ich nur erhöhen kann, bis sein Wert 4?

+6

Deshalb stoppt die Schleife, weil im Grunde der 'i'' 5' Wert hat und da Sie die 'i' Variable global gemacht haben, können Sie auf sie außerhalb der' for' Schleife zugreifen und sie hat '5' Wert. –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_() – j08691

+0

'i ++' passiert am Ende jeder Iteration, also wenn 'i' gleich ist 4 Sie schreiben es in das Dokument und dann wird "i" auf 5 inkrementiert - das ist es, was bewirkt, dass "i <5" falsch ist und die Schleife stoppt, "i" ist jetzt "5". – skyline3000

Antwort

1

Sie können den final-expression Teil in den Zustand Teil der for statement bewegen, wo der Zuwachs nur stattfindet, wenn der Wert als 4 kleiner ist.

var i; 
 
for (i = 0; i < 4 && ++i;) { 
 
    console.log(i);   // 1 ... 4 
 
} 
 

 
console.log('last value', i); // 4

0

Der Testbegriff des i < 5 wird zu Beginn jeder Schleife ausgewertet; Wenn es falsch ist, wird die Schleife beendet (der Wert bleibt bei 5). Der i ++ - Teil findet immer am Ende einer Iteration statt, dh nachdem die Zahl 4 in der Schleife verarbeitet wurde, wird sie auf 5 inkrementiert, dann springt sie zum Anfang der Schleife, wo sie die Bedingung erneut überprüft (i < 5), die es, aber der Wert von i nicht umgekehrt zurück auf 4.

-1
  • der Zustand des Schleifenblock ausfällt ist i < 5 verarbeitet werden, werden so i muss weniger als 5 für die Anweisungen und Ausdrücke in ihm zu ausgewertet werden
  • Sie erhöhen i um 1 mit jedem Durchlauf
  • Wenn i gleich 4 ist, erhöhen Sie es um 1 wieder wie folgt dass i wird gleich 5. i < 5 ist nicht mehr wahr, so dass innerhalb der Schleife Block nicht ausgeführt wird
  • Nichts dreht sich i zurück ein Inkrement; so behält er es nach der Schleife

können Sie einzigartige Möglichkeiten anwenden, aber in der Regel die erste und letzte Beispiel unten ist der gemeinsame Ansatz:

var log = console.log; 
 

 
// Example 1: Decrease Loop Iterator After 
 
for (var i = 1; i < 5; i++) 
 
    log(i); 
 
log('New i:', --i); // 4 
 

 

 
// Example 2: Count in conditional 
 
var count = 0; 
 
for (var i = 1; i < 5 && ++count; i++) 
 
    log(i); 
 
log('New i:', count); // 4 
 

 

 
// Example 3: Count in loop body 
 
var count = 0; 
 
for (var i = 1; i < 5 && ++count; i++) 
 
    log(i); 
 
log('New i:', count); // 4

-1

bitte Zählvariable verwenden, da Ich werte erhöht nach jeder Ausführung der Anweisung. das heißt nach der Schleifenausführung beendet ist, werde ich immer 5

var count=0; 
 
for (i = 1; i <5; i++) { 
 
    document.write(i + "<br>"); //I increases after these statement execution so it will be 5 at last 
 
    count=count+1; 
 
} 
 

 
document.write("New i: " + count); //Outputs 5

0

sein, wenn Sie eine Variable in einer Schleife-Anweisung deklarieren, ist es die Variable im gleichen Umfang wie die Schleife speichert. Schleifen inkrementieren (i ++) am Ende der Schleife, dann überprüfen Sie die Bedingung (i < 5), um zu sehen, ob sie sich wiederholen sollten. Nach der Schleife existiert die Variable i noch. Sehen Sie sich das folgende Snippet für ein Spiel an.

Außerdem sollten Sie das var-Schlüsselwort bei der Deklaration von i verwenden, andernfalls wird die Variable im globalen Bereich gespeichert (was eine schlechte Praxis ist).

//variable i is captured here (with the var keyword) 
 

 
for(var i = 1; i < 5; i++) { 
 
    //for the fourth iteration, i === 4 
 
    
 
    //so it prints 4. 
 
    document.write(i); 
 
    
 
    
 
    //i++ happens right now, so i now is 5. 
 
    //then the loop checks the condition to see if it 
 
    //should continue. i isn't less than 5, so the loop breaks. 
 
} 
 

 
//and the value of i is still 5. so this prints 5. 
 
document.write('</br>' + i);

-1
  1. Sie i als globale Variable deklariert haben.
  2. So funktioniert die for-Schleife.

for (initialization, condition, increment/decrement) { 
 
    
 
    }

Sie mit 1 initialisiert, und es erfüllt die Bedingung i < 5, so dass es die Schleife und Drucke i eintritt. Danach führt es die Inkrementierung/Dekrementierung durch und erhöht den Wert in Ihrem Fall um 1. Während also i = 4 und i < 5 es tritt in die Schleife und Drucke 4, aber nach dem dann führt es Inkrementoperation und erhöhen den Wert von i bis 5.

Im nächsten Schritt wird, wie die Bedingung i < 5 nicht zufrieden, so bricht es die Schleife und gehen Sie zu der letzten Anweisung, wo Sie drucken i, das ist 5.

Ich hoffe, es ist jetzt klar.

-1

var array = [1, 2, 3, 4]; 
 
array.forEach(function(value) { 
 
    document.write(value + "<br />"); 
 
}); 
 
document.write("Values processed: " + array.length);

Nein, ich scherze ich nicht. Verwenden Sie Arrays, wann immer Sie können, sie ersparen Ihnen eine Menge Ärger. Der Nebeneffekt, um den Sie tatsächlich bitten, kann zu schwer zu verfolgenden Fehlern führen (i sieht so aus, als wäre es nur für die Schleife gedacht, stellen Sie sich Tonnen von Linien zwischen der Schleife und der letzten document.write vor). Und es gibt das off-by-one error Problem mit for Schleifen.

Sie werden wahrscheinlich sowieso mit einem Array enden, sobald Ihr Code beginnt, sinnvolle Sachen zu tun (Sie wollen nicht bis zu 4 zählen, oder?). Also tun Sie sich einen Gefallen und umarmen Sie all diese mächtigen Array methods.