2017-07-18 4 views
1

Hallo sind mit Javascript in mozilla firefox 53,0 und in for-Schleife fand diesenJavascript für Schleife seltsamen Verhalten

Fall 1: Für sintaxis Endlosschleife und Browser-Absturz führen.

for(var i=0;i<array.length;i+2) 
     { 
      console.log(array[i]); 
      console.log(array[i+1]); 
      console.log(array[i+2]); 
     } 

Fall 2: Normales Schleifenverhalten.

for(var i=0;i<array.length;i=i+2) 
     { 
      console.log(array[i]); 
      console.log(array[i+1]); 
      console.log(array[i+2]); 
     } 

Sind beide Syntaxen korrekt? Was kann den unendlichen Zyklus erzeugen? Das Array von console.log (array) extrahiert Array [ "Dieguez Jorge Alberto", "Cel .: (02244) 453.125", "[email protected]"]

+0

der erste, der eine Endlosschleife als letzten Teil verursachen würden Sie nur noch 'i 2' +, die nicht die Variable' I' nicht aktualisiert, wird sich so 'I' nie als' Array gleich oder höher sein. ja length' –

+0

, für for (var i = 0; i user2402794

Antwort

1

A for Schleife in JavaScript (und in Java, und in vielen anderen Sprachen) hat die folgende allgemeine Syntax:

for (<loop variable; init>; <criteria check>; <change to loop variable>) 

Bitte verzeiht mir, wenn diese nicht genau sein. In Ihrem ersten Schleife:

for (var i=0; i < array.length; i+2) 

Ihr sagen JavaScript i+2 am Ende jeder Schleife Iteration zu berechnen. Sie weisen diesen Wert jedoch nie dem Schleifenzähler i zu. Daher wiederholt sich die Schleife unendlich mit i mit einem Nullwert. Doch in der folgenden Schleife:

for (var i=0; i < array.length; i=i+2) 

Sie zuweisen i+2-i. Dies bedeutet, dass i bei jeder Iteration der Schleife um zwei zunimmt, und die Schleife wird schließlich beendet, wenn i die Größe der Länge des Arrays erreicht.

Update:

auf Ihrem Kommentar Basierend scheint es, dass Sie dachten, i + 2 würde auf dem Gelände erhöhen und zuweisen, dass i++ tut dies, ohne eine explizite Gleichheitszeichen. Allerdings ist i++ wirklich eine Abkürzung für i = i + 1, so dass hier tatsächlich eine Zuweisung stattfindet. Aber i + 2 ist keine Zuweisung, es ist nur ein Ausdruck, daher geht Ihre Schleife für immer weiter.

+0

ich verstehe, verwenden Sie diese Syntax, weil ich immer für verwenden (var i = 0; i user2402794

+0

@ user2402794 'i ++' ist eine Abkürzung für 'i = i + 1 ', so gibt es tatsächlich eine Zuordnung passiert da, es ist nur nicht explizit. –

+0

ok danke für die schnelle Antwort – user2402794

0

In der ersten Schleife Sie nicht Neuzuweisen die Variable i. i + 2 ist nur eine Aussage, nie den Wert von i ändern.

Aus diesem Grund wird der Loop-Exit-Zustand von i < array.length niemals erfüllt und die Schleife wird nie beendet.

0

in der ersten Schleife werden Sie nicht neu zuweisen Variable i, wenn Sie auf seine wollen so sein muss

i + = 2 gleich mit i = i + 2

wenn Sie laufen ich + 2 seine gerechte Aussage und ändere nicht den Wert von Variable i. also würde ich niemals zunehmen. Vielleicht können Sie sehen, dass die Konsole nur statisch, aber immer loop druckt. weil ich nie aufhören würde, weil ich nie die Länge der Array erreichen werde. also, du musst mich für die for-Schleife brechen.

Verwandte Themen