मान लीजिए यहां एक नमूना कोड स्निपेट है और हमें इस स्निपेट के संभावित आउटपुट को बताने और इसके लिए व्याख्या प्रदान करने की आवश्यकता है।
var name = 'Zakir'; (() => { name = 'Rahul'; return; console.log(name); function name(){ let lastName = 'Singh'; } })(); console.log(name);
आइए एक भोले दृष्टिकोण के साथ इस समस्या को लाइन दर लाइन देखें।
1 → 'Zakir' वेरिएबल name में स्टोर होता है
3 → हम एक सेल्फ-एक्सिक्यूटिंग अनाम फ़ंक्शन के अंदर प्रवेश करते हैं
4 → वेरिएबल name को 'Rahul' से पुनः आरंभ किया जाता है
5 → return स्टेटमेंट मिलता है, इसलिए हम फ़ंक्शन से बाहर निकलते हैं
15 → name वेरिएबल को प्रिंट करें जिसका वर्तमान मान 'Rahul' है
तो, अंतिम आउटपुट होगा
Rahul
लेकिन, दुर्भाग्य से, यह गलत है, आइए एक बार फिर कोड के माध्यम से जाएं यह देखने के लिए कि हम कहां गलत हुए, इस बार वेरिएबल और फंक्शन होइस्टिंग की अवधारणा को ध्यान में रखते हुए।
1 → 'Zakir' वेरिएबल name में स्टोर होता है
3 → हम एक सेल्फ-एक्सिक्यूटिंग अनाम फ़ंक्शन के अंदर प्रवेश करते हैं
जैसे ही हम फ़ंक्शन में प्रवेश करते हैं, फंक्शन होइस्टिंग अपना काम करती है और सेल्फ-एक्सिक्यूटिंग फ़ंक्शन के नीचे परिभाषित function name() को सेल्फ-एक्सिक्यूटिंग फ़ंक्शन के बहुत शीर्ष पर होइस्ट कर दिया जाता है और उस मध्यवर्ती स्थिति में कोड कुछ इस तरह होगा -
उदाहरण
let name = 'Zakir'; (() => { let name; name = 'Rahul'; return; console.log(name); name = function(){ let lastName = 'Singh'; } })(); console.log(name);
ध्यान दें कि जब भी कोई वेरिएबल/फंक्शन अपने स्कोप के शीर्ष पर होइस्ट होता है तो यह केवल परिभाषित और आरंभ होता है, यह अपनी वास्तविक स्थिति पर आरंभ होता है, शीर्ष पर यह अपरिभाषित होता है, लेकिन यह मौजूद होता है।
तो, जब वेरिएबल name को पुनः आरंभ किया जाता है तो यह लोकल वेरिएबल name होता है जो पुनः आरंभ होता है न कि ग्लोबल वेरिएबल, इसलिए इसके बाद हम सेल्फ-एक्सिक्यूटिंग फ़ंक्शन से बाहर निकलते हैं और ग्लोबल वेरिएबल name को कंसोल पर प्रिंट करते हैं, जिसमें अभी भी 'Zakir' है। इसलिए, आउटपुट होगा -
आउटपुट
Zakir