आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं।

उत्थापन एक जावास्क्रिप्ट तंत्र है जो आपको प्रारंभ करने से पहले चर और कार्यों तक पहुंचने देता है। इस तरह की घोषणा को फहराना प्रभावी रूप से इसे अपने दायरे के शीर्ष पर ले जाता है।

जावास्क्रिप्ट में हॉइस्टिंग कैसे काम करता है और अपने कोड में त्रुटियों से बचने के लिए इसे कैसे प्रबंधित करें, इसके बारे में सब कुछ जानें।

var, let, और const के साथ उत्थापन चर

उत्थापन संभव है क्योंकि जावास्क्रिप्ट JIT (जस्ट-इन-टाइम) संकलन प्रणाली का उपयोग करता है, जो आपके कोड को उनके संबंधित दायरे में सभी चर की पहचान करने के लिए स्कैन करता है।

JIT संकलक तब संकलन पर चर घोषणाओं के सभी उदाहरणों को उनके दायरे के शीर्ष पर फहराता है। जावास्क्रिप्ट केवल वेरिएबल्स की घोषणाओं को फहराता है, उनके इनिशियलाइज़ेशन को नहीं।

चरों का व्यवहार, जब फहराया जाता है, उस कीवर्ड पर निर्भर करता है जिसे आप उन्हें घोषित करते हैं, क्योंकि प्रत्येक कीवर्ड अलग-अलग व्यवहार करता है।

वर

के साथ घोषित एक गैर-प्रारंभिक चर तक पहुँचना वर कीवर्ड वापस आ जाएगा अपरिभाषित. उदाहरण के लिए:

instagram viewer
सांत्वना देनालॉग (फू); // अपरिभाषित
वर फू = 2;

उपरोक्त कोड लॉग करता है अपरिभाषित क्योंकि यह कॉल करता है कंसोल.लॉग इससे पहले कि यह चर को आरंभ करता है।

जावास्क्रिप्ट कंपाइलर पिछले कोड ब्लॉक को इस प्रकार देखता है:

वर फू;
सांत्वना देनालॉग (फू); // अपरिभाषित
फू = 2;

उत्थापन के दौरान, चर पालन करते हैं जावास्क्रिप्ट स्कोपिंग के नियम. जावास्क्रिप्ट केवल एक चर को उस दायरे के शीर्ष पर फहराएगा जिसमें आपने इसे घोषित किया था। एक वेरिएबल के मान को उसके घोषित दायरे से बाहर लॉग करने का प्रयास करने का परिणाम होगा a संदर्भ त्रुटि. उदाहरण के लिए, यदि आप किसी फ़ंक्शन के अंदर एक चर घोषित करते हैं, तो वह उस दायरे के बाहर दिखाई नहीं देगा:

समारोहmyFunction() {
सांत्वना देनालॉग (फू); // अपरिभाषित
वर फू = 10;
}

मेरा समारोह ();
सांत्वना देनालॉग (फू); // संदर्भ त्रुटि: फू परिभाषित नहीं है

एक वेरिएबल को उसके दायरे से बाहर एक्सेस करने की कोशिश का परिणाम होगा a संदर्भ त्रुटि.

चलो और कास्ट

के अनुसार एमडीएन पर दस्तावेज़ीकरण होने देना और कॉन्स्ट उत्थापन, जावास्क्रिप्ट भी घोषित चर को लहराता है होने देना और कॉन्स्ट खोजशब्द। हालाँकि, के साथ घोषित चर के विपरीत वर कीवर्ड, वे एक के साथ आरंभ नहीं होते हैं अपरिभाषित कीमत।

उदाहरण के लिए:

समारोहmyFunction() {
सांत्वना देनालॉग (फू); // अपरिभाषित
सांत्वना देनालॉग (बार); // संदर्भ त्रुटि: आरंभीकरण से पहले 'बार' तक नहीं पहुंच सकता
सांत्वना देनालॉग (बाज़); // ReferenceError: आरंभीकरण से पहले 'baz' तक नहीं पहुँच सकता

वर फू = 5;
होने देना बार = 10;
कॉन्स्ट बाज = 15;
}

मेरा समारोह ();

मान के साथ प्रारंभ करने से पहले आप let और const कीवर्ड के साथ घोषित वेरिएबल्स तक नहीं पहुंच सकते।

उत्थापन कार्य

जावास्क्रिप्ट हॉइस्ट चरों के समान ही कार्य करता है। चर के साथ, यह इस बात पर निर्भर करता है कि आप उन्हें कैसे घोषित करते हैं। उदाहरण के लिए, जावास्क्रिप्ट फ़ंक्शन घोषणाओं को फ़ंक्शन एक्सप्रेशन से अलग तरीके से फहराता है।

एक फ़ंक्शन घोषणा एक नाम के साथ घोषित एक फ़ंक्शन है, जबकि एक फ़ंक्शन एक्सप्रेशन एक फ़ंक्शन है जिसका नाम आप छोड़ सकते हैं। उदाहरण के लिए:

समारोहफू() {
// फ़ंक्शन घोषणा
}

कॉन्स्ट बार = () => {
// फ़ंक्शन अभिव्यक्ति
}

जावास्क्रिप्ट फ़ंक्शन डिक्लेरेशन को फहराता है लेकिन फ़ंक्शन एक्सप्रेशन को नहीं। उदाहरण के लिए:

फू (); // 5
छड़(); // लेखन त्रुटि: बार () कार्य नहीं है

// फ़ंक्शन घोषणा
समारोहफू() {
सांत्वना देना।लकड़ी का लट्ठा(5);
}

// फंक्शन एक्सप्रेशन
वर बार = समारोहअभिव्यक्ति() {
सांत्वना देना।लकड़ी का लट्ठा(10);
};

यह कोड कॉल करता है फू इसे फ़ंक्शन के रूप में घोषित करने और प्रारंभ करने से पहले, लेकिन यह अभी भी लॉग करता है 5 कंसोल के लिए। हालांकि फोन करने की कोशिश की जा रही है छड़ ए में परिणाम त्रुटि प्रकार.

उत्थापन का प्रबंध करना

हॉस्टिंग और गलत तरीके से प्रबंधित किए जाने पर होने वाली संभावित त्रुटियों के बारे में जागरूक होने से आप डिबगिंग के लंबे घंटों को बचा सकते हैं। यहां कुछ तरीके दिए गए हैं जिनसे आप उत्थापन का प्रबंधन कर सकते हैं।

कार्यों के अंदर चर घोषित करें

उन कार्यों के अंदर चर घोषित करें जो उन्हें एक्सेस करेंगे। आप हमेशा ऐसा करने में सक्षम नहीं होंगे, क्योंकि आपको एक वैश्विक चर की आवश्यकता हो सकती है जिसे आप कई कार्यों में एक्सेस कर सकते हैं। इसलिए सुनिश्चित करें कि यदि आपको वास्तव में आवश्यकता है तो आप केवल विश्व स्तर पर चर घोषित करें।

चलो या स्थिरांक के साथ चर घोषित करें

एल का प्रयोग हमेशा करना चाहिएएट और सीऑनस्ट की जगह कीवर्ड्स वर चर घोषित करते समय कीवर्ड। किसी फ़ंक्शन के अंदर स्थानीय चर घोषित करते समय यह अभ्यास लाभदायक होता है। करने का सही तरीका जानना जावास्क्रिप्ट में चर घोषित करें आपके कोड में उत्थापन के कारण होने वाली त्रुटियों की संभावना कम हो जाती है।

चरों को उनके दायरे के शीर्ष पर घोषित करें

किसी अन्य कथन से पहले, अपने सभी चरों को उनके संबंधित दायरे के शीर्ष पर घोषित करें। ऐसा करने से यह सुनिश्चित होगा कि जावास्क्रिप्ट कंपाइलर को उन वेरिएबल्स को उन तक पहुंचने के लिए फहराना नहीं है।

सख्त मोड का उपयोग करना

सख्त मोड एक जावास्क्रिप्ट मोड है जो खराब सिंटैक्स को नियंत्रित करता है, आपके कोड के रन टाइम को अनुकूलित करता है, और संकलन समय पर त्रुटियों को फेंक कर जावास्क्रिप्ट के ढीले टाइप किए गए सिंटैक्स के दुरुपयोग को प्रतिबंधित करता है।

उदाहरण के लिए, "मैला मोड" में, उत्थापन के कारण, आप प्रारंभिक कार्य के बाहर एक चर का उपयोग कर सकते हैं, भले ही इसे घोषित नहीं किया गया हो:

मेरा समारोह ();
सांत्वना देनालॉग (फू); // 20

समारोहmyFunction() {
फू = 20;
}

उपरोक्त कोड ब्लॉक में, जावास्क्रिप्ट स्वचालित रूप से घोषणा करता है फू और इसे वैश्विक दायरे के शीर्ष पर फहराता है, उस दायरे की अनदेखी करते हुए जिसमें आपने इसे आरंभ किया था।

आप इस व्यवहार को ठीक करने के लिए सख्त मोड का उपयोग कर सकते हैं और यदि आप इसके कार्य क्षेत्र के बाहर चर तक पहुँचने का प्रयास करते हैं तो एक त्रुटि फेंक सकते हैं।

सख्त मोड पूरी तरह से फहराना बंद नहीं करता है। इसके बजाय, यह उत्थापन के सबसे भ्रामक और त्रुटि-प्रवण रूपों को रोकता है। सख्त मोड सुरक्षा नेट का उपयोग करते समय भी सामान्य अवधारणा और फहराने के पीछे के नियमों को समझना अभी भी महत्वपूर्ण है।

वैश्विक स्तर पर सख्त मोड में शामिल होने के लिए, अपनी स्क्रिप्ट फ़ाइल के शीर्ष पर सिंटैक्स घोषित करें:

"उपयोगकठोर"; // या 'उपयोगकठोर'

फ़ंक्शन स्तर पर सख्त मोड में ऑप्ट इन करने के लिए, किसी भी कथन से पहले फ़ंक्शन बॉडी के शीर्ष पर सिंटैक्स घोषित करें:

समारोहmyStrictFunction() {
"उपयोगकठोर";
}

यदि आप फ़ंक्शन स्तर पर सख्त मोड की घोषणा करते हैं, तो सेटिंग केवल उस फ़ंक्शन के भीतर के कथनों पर लागू होगी।

वैश्विक स्तर पर सख्त मोड की घोषणा करना चर को उनके संबंधित दायरे से बाहर जाने से रोकता है:

"उपयोगकठोर";
मेरा समारोह ();
सांत्वना देनालॉग (फू); // संदर्भ त्रुटि: फू परिभाषित नहीं है

समारोहmyFunction() {
फू = 20;
}

सख्त मोड चालू होने पर, जावास्क्रिप्ट कंपाइलर लहराएगा मेरा समारोह () अघोषित चर के बिना इसके दायरे के शीर्ष पर।

समझें कि उत्थापन पर क्या प्रभाव पड़ता है

उत्थापन जावास्क्रिप्ट के लिए काफी अनूठा है और अपने सिर को चारों ओर लपेटने के लिए एक बहुत ही भ्रमित करने वाला व्यवहार हो सकता है। यह चर और कार्यों को प्रभावित कर सकता है, लेकिन जरूरत पड़ने पर इसे रोकने के तरीके हैं।

उत्थापन को कई कारक प्रभावित कर सकते हैं, इसलिए आपके कोड में चर या प्रकार्य उत्थापन की किसी भी घटना से बचना सबसे अच्छा है।