Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 129
5.4.3for
ОглавлениеDie for-Schleife lässt sich oft bequemer einsetzen als eine while-Schleife. Die for-Anweisung vereinfacht Schleifen, die einem verbreiteten Muster entsprechen. Die meisten Schleifen besitzen irgendeine Art von Schleifenzähler. Das ist eine Variable, die initialisiert wird, wenn die Ausführung der Schleife beginnt, und vor jedem Durchlauf der Schleife geprüft wird. Am Ende der Schleife wird die Zählervariable schließlich inkrementiert oder auf andere Weise aktualisiert, unmittelbar bevor sie erneut geprüft wird. Bei Schleifen dieser Art sind Initialisierung, Prüfung und Aktualisierung die drei entscheidenden Manipulationen der Schleifenvariablen. Die for-Anweisung codiert diese drei Schritte als Ausdrücke und macht diese Ausdrücke zu einem expliziten Bestandteil der Schleifensyntax:
for(Initialisierung ; Prüfung ; Inkrementierung)
Anweisung
Initialisierung, Prüfung und Inkrementierung sind drei Ausdrücke (die durch Semikola getrennt werden), die die Schleifenvariable initialisieren, prüfen und inkrementieren. Dadurch, dass sie alle in der ersten Zeile der Schleife stehen, lässt sich leicht erkennen, was eine for-Schleife macht, und es erinnert daran, die Initialisierung und Inkrementierung der Schleifenvariablen nicht zu vergessen.
Am einfachsten lässt sich die Arbeitsweise einer for-Schleife anhand einer äquivalenten while-Schleife zeigen:2
Initialisierung;
while(Prüfung){
Anweisung
Inkrementierung;
}
Der Ausdruck Initialisierung wird einmal ausgewertet, bevor die Schleife beginnt. Damit er nützlich ist, muss dieser Ausdruck Seiteneffekte haben (in der Regel eine Zuweisung). JavaScript erlaubt auch, dass die Initialisierung eine Anweisung zur Variablendeklaration ist, sodass man den Schleifenzähler gleichzeitig deklarieren und initialisieren kann. Der Ausdruck Prüfung wird vor jeder Iteration ausgewertet und entscheidet, ob der Inhalt der Schleife ausgeführt wird. Wird Prüfung zu einem truthy-Wert ausgewertet, wird die Anweisung ausgeführt, die den Schleifenkörper bildet. Abschließend wird der Ausdruck Inkrementierung ausgewertet. Auch das sollte ein Ausdruck mit Seiteneffekten sein, damit er hier einen Sinn hat. Normalerweise ist es entweder ein Zuweisungsausdruck, oder es werden die Operatoren ++ oder -- verwendet.
Wir können die Zahlen von 0 bis 9 beispielsweise mit folgender for-Schleife ausgeben. Vergleichen Sie sie mit der äquivalenten while-Schleife, die im vorherigen Abschnitt gezeigt wurde:
for(let count = 0; count < 10; count++) {
console.log(count);
}
Schleifen können natürlich erheblich komplexer werden als die in diesem einfachen Beispiel, und manchmal ändern sich bei jeder Iteration gleich mehrere Variablen. Das ist die einzige Situation, in der in JavaScript gemeinhin der Kommaoperator zum Einsatz kommt. Mit ihm lassen sich mehrere Initialisierungs- und Inkrementierungsausdrücke zu einem einzigen Ausdruck kombinieren, der dann in einer for-Schleife verwendet werden kann:
let i, j, sum = 0;
for(i = 0, j = 10 ; i < 10 ; i++, j--) {
sum += i * j;
}
In allen bisherigen Beispielen für Schleifen war die Schleifenvariable numerisch. Das ist zwar üblich, aber nicht zwingend erforderlich. Im folgenden Code wird mit einer for-Schleife eine verkettete Liste (Linked List) durchlaufen und das letzte Objekt der Liste zurückgegeben (d.h. das erste Objekt, das keine next-Eigenschaft hat):
function tail(o) { // Rückgabe des letzten Objekts
// der verketteten Liste o.
for(; o.next; o = o.next) /* leer */ ; // Durchlaufen, solange o.next
// truthy ist.
return o;
}
Beachten Sie bitte, dass der gezeigte Code keinen Initialisierungsausdruck aufweist. Jeder der oben erläuterten drei Ausdrücke kann bei einer for-Schleife weggelassen werden, aber die beiden Semikola sind erforderlich. Lassen Sie den Ausdruck Prüfung weg, läuft die Schleife endlos. for(;;) ist also neben while(true) eine weitere Möglichkeit, eine Endlosschleife zu formulieren.