यह एक जनरेटर फ़ंक्शन है।
जनरेटर वे कार्य हैं जिन्हें बाहर निकाला जा सकता है और बाद में फिर से प्रवेश किया जाता है। उनके संदर्भ (वैरिएबल बाइंडिंग) को पुन: प्रवेश द्वारों पर सहेजा जाएगा।
एक जनरेटर फ़ंक्शन को कॉल करना उसके शरीर को तुरंत निष्पादित नहीं करता है; फ़ंक्शन के लिए एक पुनरावृत्ति ऑब्जेक्ट इसके बजाय लौटाया जाता है। जब इट्रेटर की next()
विधि को बुलाया जाता है, तो जनरेटर फ़ंक्शन के निकाय को पहले yield
अभिव्यक्ति तक निष्पादित किया जाता है , जो इट्रेटर से लौटाए जाने वाले मूल्य को निर्दिष्ट करता है या, yield*
किसी अन्य जनरेटर फ़ंक्शन को डेलिगेट करता है।
ऐतिहासिक नोट:
यह एक प्रस्तावित वाक्यविन्यास है EcmaScript.next
।
मोज़िला के डेव हरमन ने EcmaScript.next के बारे में बात की । पर 30:15 वह जनरेटर के बारे में बात करती है।
इससे पहले, वह बताते हैं कि कैसे मोज़िला प्रयोगात्मक रूप से प्रस्तावित भाषा परिवर्तनों को लागू करने में मदद कर रही है ताकि समिति को मदद मिल सके। डेव ब्रेंडन ईच, मोज़िला के सीटीओ (मुझे लगता है), और मूल जावास्क्रिप्ट डिजाइनर के साथ मिलकर काम करता है।
आप EcmaScript वर्किंग ग्रुप विकी पर अधिक विवरण पा सकते हैं: http://wiki.ecmascript.org/doku.php?id=harmony:generators
कार्य समूह (TC-39) के पास सामान्य सहमति है कि EcmaScript.next में किसी प्रकार का जनरेटर इट्रेटर प्रस्ताव होना चाहिए, लेकिन यह अंतिम नहीं है।
आपको भाषा के अगले संस्करण में बदलाव के बिना इस पर भरोसा नहीं करना चाहिए, और अगर यह नहीं बदलता है, तो यह संभवतः कुछ समय के लिए अन्य ब्राउज़रों में व्यापक रूप से दिखाई नहीं देगा।
अवलोकन
प्रथम श्रेणी के कोरटाइन को निलंबित निष्पादन संदर्भों (यानी, फ़ंक्शन सक्रियण) को संलग्न करने वाली वस्तुओं के रूप में दर्शाया गया है। पूर्व कला: पायथन, आइकन, लुआ, स्कीम, स्मॉलटाक।
उदाहरण
फाइबोनैचि संख्याओं का "अनंत" क्रम (2 53 के आसपास व्यवहार के बावजूद ):
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
जेनरेटरों को छोरों पर प्रसारित किया जा सकता है:
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
जनरेटर चलने वाले हैं:
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
function*
फ़ायरफ़ॉक्स को v26 के बाद से फ़ायरफ़ॉक्स में समर्थित किया गया है: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *। पुराने संस्करणों ने एक अलग वाक्यविन्यास का उपयोग किया।