Enkelmalige werking van iterators in JavaScript
Elke iterator kan slegs een keer in 'n siklus deelneem.
Dit is effens onverwags, maar logies - want 'n iterator wat deurloop is,
stel sy done na false,
en kan dus nie weer herhaal word nie.
Kom ons maak seker hiervan. Laat ons die volgende generator hê:
function *func() {
yield 1;
yield 2;
yield 3;
}
Laat ons 'n iterator maak:
let iter = func();
Laat ons die iterator met een siklus deurloop:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
En nou deurloop ons die iterator met twee siklusse:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // werk nie
}
Om die probleem op te los, moet jy vir elke nuwe siklus 'n nuwe iterator skep:
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
}
Ons kan vereenvoudig:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Korrigeer die fout wat gemaak is in die volgende kode:
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);
}