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