7 Stimmen

Werden in einer Schleife alle Operationen in der Endbedingung in jeder Iteration ausgewertet?

Im folgenden Code:

for (var i = 0; i < object.length; i++){  
    ....  
}  

führt die Operation durch object.length jedes Mal in der Iteration ausgewertet werden?
Es wäre am sinnvollsten, wenn die Sprache dies einmal auswerten und das Ergebnis speichern würde. Ich habe jedoch einen Code gelesen, bei dem jemand die Operation vor Beginn der Schleife ausgewertet und in einer Variablen gespeichert hat, die in der Endbedingung verwendet wurde.
Wird dies in verschiedenen Sprachen unterschiedlich gehandhabt? Gibt es spezielle Informationen für Javascript?

1voto

Alex Punkte 3644

In einigen Sprachen hängt dies von der Optimierungsstufe ab, die Sie zur Erstellungszeit konfiguriert haben. Ich glaube, dass in C++ zum Beispiel die Kennzeichnung eines Feldes als flüchtig eine erneute Bewertung erzwingt. Schauen Sie sich diese Links an:

http://en.wikipedia.org/wiki/Loop_unwinding

http://msdn.microsoft.com/en-us/library/12a04hfd.aspx

0voto

Robusto Punkte 30472

In Javascript wird es jedes Mal ausgewertet. Sie können es umgehen, indem Sie im ersten Teil der Schleife eine "max"-Variable setzen:

for (var i=0, imax=object.length; i<imax; i++) {
  // statements
}

0voto

Gabriele Petrioli Punkte 182294

Ja, sie wird bei jeder Iteration berechnet.

warum nicht testen?

var loop = 5;

for (var i = 0; i< loop; i++)
    {
    alert(i + ' of ' + loop);
    loop--;
    }

live bei http://jsfiddle.net/MSAdF/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X