नीचे मेरे पास कोड की प्यारी और सरल 2 पंक्तियाँ हैं। लेकिन मैं आपको गारंटी दे सकता हूं कि यह या तो बहुत भ्रमित करेगा (क्योंकि आपने जेएस के रेखांकित सिद्धांत को नजरअंदाज कर दिया है) या आपको आराम देगा।
लेकिन इसमें नीचे दी गई ज्ञान अवधारणाएं पूरी तरह से भरी हुई हैं
मेरा विरोधाभासी बयान
जैसे var, const और Let भी अपनी संपत्तियों को लहराते हैं, लेकिन वे अलग-अलग क्षेत्र में हैं।
उत्थापन डीईएफ़ (सरल/आम आदमी संस्करण)
अब यह गहराई से जानने का समय है कि जेएस हमारे 2 लाइन कोड को कैसे संकलित और निष्पादित करता है
जावास्क्रिप्ट में, जिस तरह से कंपाइलर और इंजन वैरिएबल घोषणाओं और असाइनमेंट को संभालते हैं, उसमें सूक्ष्मता बरती जा सकती है, खासकर जब लेट और वेरिएबल के साथ काम किया जाता है।
आइए दिए गए कोड के लिए कंपाइलर और निष्पादन दोनों दृष्टिकोणों से प्रक्रिया को तोड़ें:
name = 'ashu'; let name;
इस बिंदु पर मैं स्पष्ट कर रहा हूं कि जब हम जावास्क्रिप्ट कोड लिखते हैं, तो पहला पार्सर और कंपाइलर हमारे कोड को संकलित करता है फिर यह निष्पादन चरण में चला जाता है।
संकलक परिप्रेक्ष्य
पहली पंक्ति: नाम = 'आशु';
संकलन चरण के दौरान,
जावास्क्रिप्ट इंजन कोड को पार्स करता है और आवश्यक स्कोप बनाता है।
असाइनमेंट का नाम = 'आशू';
ध्यान दिया जाएगा, लेकिन इस स्तर पर, इंजन कोड निष्पादित नहीं करता है; यह केवल नाम नामक एक चर के लिए एक असाइनमेंट के अस्तित्व को रिकॉर्ड करता है।
यदि नाम पहले घोषित नहीं किया गया है, तो कंपाइलर इसे वैश्विक चर (वैश्विक दायरे में var नाम) के असाइनमेंट के रूप में मानता है क्योंकि var घोषणाएं विश्व स्तर पर फहराई और पहुंच योग्य हैं।
दूसरी पंक्ति: नाम दें;
जब कंपाइलर का सामना लेट नाम से होता है; घोषणा, यह स्वीकार करती है कि नाम को ब्लॉक-स्कोप किया जाना चाहिए।
कंपाइलर टेम्पोरल डेड जोन (टीडीजेड) में नाम रखता है जिस दायरे से यह संबंधित है,
इसका मतलब है कि यह नाम के अस्तित्व को स्वीकार करता है लेकिन इसे अप्रारंभीकृत के रूप में चिह्नित करता है।
लेट घोषणा को var की तरह ही नहीं फहराया गया है।
इसके बजाय, यह दायरे में एक बाइंडिंग बनाता है और इसे केवल तभी आरंभ करता है जब घोषणा निष्पादित होती है।
निष्पादन परिप्रेक्ष्य
पहली पंक्ति: नाम = 'आशु';
जब जावास्क्रिप्ट इंजन असाइनमेंट नाम = 'आशू' निष्पादित करता है;,
यह वर्तमान दायरे में नाम के अस्तित्व की जाँच करता है। चूंकि नाम लेट के साथ घोषित किया गया है, लेकिन टीडीजेड (टेम्पोरल डेड जोन) में है, लेट घोषणा शुरू होने से पहले इसे एक्सेस करने के किसी भी प्रयास के परिणामस्वरूप एक ReferenceError होगा।
इसलिए, इस बिंदु पर, नाम टीडीजेड में है, और असाइनमेंट का नाम = 'आशू'; परिणामस्वरूप एक ReferenceError होता है।
दूसरी पंक्ति: नाम दें;
यह पंक्ति ब्लॉक दायरे के भीतर नाम चर को आरंभ करती है।
इस बिंदु के बाद, नाम अब टीडीजेड में नहीं है और इसे बिना किसी त्रुटि के एक्सेस या असाइन किया जा सकता है।
अब बोनस टिप
अघोषित बनाम अपरिभाषित बनाम अप्रारंभीकृत के बीच अंतर;
अघोषित :- वेरिएबल अभी तक घोषित नहीं हुआ है।
अपरिभाषित :- वेरिएबल घोषित किया गया लेकिन प्रारंभ नहीं किया गया;
अप्रारंभिक :- वेरिएबल परिभाषित है लेकिन इसका मान बाद के भाग में आएगा।
उदा:- स्थिरांक परिणाम = multipleBy2(5);
जब तक फ़ंक्शन का रिटर्न मान परिणाम के लिए निर्दिष्ट नहीं किया जाएगा तब तक यह अनइनिशियलाइज़्ड ज़ोन में रहेगा।
इंटरस्टिंग तथ्य:-
आप जानते हैं कि टेम्पोरल डेड ज़ोन को शुरू में Const के लिए सजाया गया था, लेकिन बाद में उन्हें **Let**
में अपनाया गया।संदर्भ:-
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3