जावास्क्रिप्ट में इटरेटर्स का एकल-बार कार्य

प्रत्येक इटरेटर लूप में भाग केवल एक बार ले सकता है। यह थोड़ा अप्रत्याशित है, परंतु तार्किक है - क्योंकि पारित इटरेटर अपना done को false पर सेट कर देता है, और इसलिए अब और पुनरावृत्ति नहीं कर सकता।

आइए इसका सत्यापन करें। मान लीजिए हमारे पास निम्नलिखित जनरेटर है:

javascriptfunction *func() {
  yield 1;
  yield 2;
  yield 3;
}

इटरेटर बनाते हैं:

javascriptlet iter = func();

इटरेटर को एक लूप से पुनरावृत्त करते हैं:

javascriptfor (let elem of iter) {
  console.log(elem); // 1, 2, 3
}

अब इटरेटर को दो लूप्स से पुनरावृत्त करते हैं:

javascriptfor (let elem of iter) {
  console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
  console.log(elem); // काम नहीं करता
}

समस्या के समाधान के लिए प्रत्येक नए लूप के लिए अपना इटरेटर बनाना होगा:

javascriptlet 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
}

हम सरल बना सकते हैं:

javascriptfor (let elem of func()) {
  console.log(elem); // 1, 2, 3
}

for (let elem of func()) {
  console.log(elem); // 1, 2, 3
}
Задание 1

निम्नलिखित कोड में की गई त्रुटि को सही करें:

javascriptfunction *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);
}