Einmalige Arbeitsweise von Iteratoren in JavaScript
Jeder Iterator kann nur einmal in einer Schleife
verwendet werden. Das ist etwas unerwartet,
aber logisch - schließlich setzt ein durchlaufener Iterator
sein done auf false,
was bedeutet, dass er nicht erneut durchlaufen werden kann.
Lassen Sie uns davon überzeugen. Nehmen wir an, wir haben den folgenden Generator:
function *func() {
yield 1;
yield 2;
yield 3;
}
Erstellen wir einen Iterator:
let iter = func();
Durchlaufen wir den Iterator mit einer Schleife:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Versuchen wir nun, den Iterator mit zwei Schleifen zu durchlaufen:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // funktioniert nicht
}
Um das Problem zu lösen, muss für jede neue Schleife ein eigener Iterator erstellt werden:
let iter1 = func();
for (let elem of iter1) {
console.log(elem); // 1, 2, 3
}
let iter2 = func();
for (let elem of iter2) {
console.log(elem); // 1, 2, 3
}
Wir können es vereinfachen:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Korrigieren Sie den Fehler, der im folgenden Code gemacht wurde:
function *func() {
for (let i = 1; i <= 3; i++) {
yield i;
}
}
let elems = func();
for (let elem of elems) {
console.log(elem);
}
for (let elem of elems) {
console.log(elem);
}