ni kitu kilicho na njia ya inayorudisha . Kitu ni ikiwa kina njia ya — ndilo linaloruhusu na spread kufanya kazi. () ni njia rahisi ya kuunda itereta zinazoweza kwa .
ni kitu kilicho na njia ya inayorudisha . Kitu ni ikiwa kina njia ya — ndilo linaloruhusu na spread kufanya kazi. () ni njia rahisi ya kuunda itereta zinazoweza kwa .
next(){ value, done }[Symbol.iterator]for...offunction*yieldfunction* idGenerator() {
let id = 1;
while (true) { // infinite, but lazy — only computes on demand
yield id++; // pause here, return a value, resume on next()
}
}
const gen = idGenerator();
gen.next().value; // 1
gen.next().value; // 2 — execution resumed where it paused
Kikomo kikuu: utekelezaji unasimama kila yield na kuanza tena kwenye .next() inayofuata, kuhifadhi hali ya ndani kati ya simu. Hakuna kinachohesabiwa hadi utakapoombana nayo.
// process a huge/infinite sequence without building it all in memory
function* take(iterable, n) {
let i = 0;
for (const x of iterable) {
if (i++ >= n) return;
yield x;
}
}
[...take(idGenerator(), 3)]; // [1, 2, 3] — from an infinite generator
const range = {
from: 1, to: 3,
*[Symbol.iterator]() { for (let i = this.from; i <= this.to; i++) yield i; },
};
[...range]; // [1, 2, 3] — works with for...of and spread
Jenereta huwezesha mifuatano ya polepole/isiyo na ukomo, iteration maalum, na streaming inayohifadhi kumbukumbu.
Walitakwa pia msingi wa maktaba ya mwanzo ya async (co) na wanakamatanisha iteration ya async (for await...of).
Protokoli ya iterator ndo linalochanganya for...of, spread, na destructuring kwa ajili ya arrays, Maps, Sets, na strings.