An एक विधि भएको ऑब्जेक्ट हो जसले फर्काउँछ। एक ऑब्जेक्ट हो यदि यसमा विधि छ — त्यो हो जसले र spread काम गर्छ। A () iterators सिर्जना गर्नको लागि एक सुविधाजनक तरिका हो जो सँग गर्न सक्छ।
An एक विधि भएको ऑब्जेक्ट हो जसले फर्काउँछ। एक ऑब्जेक्ट हो यदि यसमा विधि छ — त्यो हो जसले र spread काम गर्छ। A () iterators सिर्जना गर्नको लागि एक सुविधाजनक तरिका हो जो सँग गर्न सक्छ।
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
मुख्य विचार: कार्यान्वयन प्रत्येक yield मा रोकिन्छ र अगिलो .next() मा पुनः सुरू हुन्छ, कलहरू बीच स्थानीय अवस्था सुरक्षित राख्छ। तपाइंले नगरेसम्म कुनै पनि कुरा गणना गरिँदैन।
// 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
Generators आलसपूर्ण/अनन्त अनुक्रमहरू, कस्टम पुनरावृत्ति, र स्मृति-दक्ष स्ट्रिमिङ सक्षम गर्छन्।
तिनीहरू प्रारम्भिक async पुस्तकालयहरू (co) को आधार पनि थिए र async पुनरावृत्ति (for await...of) अन्तर्निहित छन्।
Iterator प्रोटोकल वह हो जसले for...of, spread, र destructuring लाई arrays, Maps, Sets, र स्ट्रिङहरूमा एकताबद्ध गर्दछ।