जावास्क्रिप्ट एक ऐसी भाषा है जो अक्सर ऐसे व्यवहार करती है जो नए लोगों को भ्रमित कर सकती है। ऐसा ही एक व्यवहार है होइस्टिंग, एक अवधारणा जिसे प्रत्येक जावास्क्रिप्ट डेवलपर को अधिक पूर्वानुमानित कोड लिखने के लिए समझना चाहिए। इस लेख में, हम जानेंगे कि उत्थापन क्या है, यह चर और कार्यों के साथ कैसे काम करता है, और आप इससे जुड़े नुकसान से कैसे बच सकते हैं।
होइस्टिंग, घोषणाओं (लेकिन आरंभीकरण नहीं) को उनके दायरे के शीर्ष पर ले जाने के जावास्क्रिप्ट के डिफ़ॉल्ट व्यवहार को संदर्भित करता है। यह कोड निष्पादित होने से पहले संकलन चरण के दौरान होता है। इसका मतलब यह है कि आप वेरिएबल और फ़ंक्शंस का उपयोग आपके कोड में वास्तव में घोषित होने से पहले कर सकते हैं।
console.log(myVar); // undefined var myVar = 5;
इस उदाहरण में, आप एक ReferenceError की उम्मीद कर सकते हैं क्योंकि घोषित होने से पहले myVar का उपयोग किया जाता है। हालाँकि, उत्थापन के कारण, वास्तव में क्या होता है कि घोषणा var myVar को उसके दायरे के शीर्ष पर ले जाया जाता है, जबकि असाइनमेंट (myVar = 5) यथावत रहता है। आंतरिक रूप से, जावास्क्रिप्ट इसकी व्याख्या इस प्रकार करता है:
var myVar; console.log(myVar); // undefined myVar = 5;
इसकी वजह से, myVar को परिभाषित किया गया है लेकिन कंसोल.लॉग चलने पर अभी तक असाइन नहीं किया गया है, यही कारण है कि यह अपरिभाषित आउटपुट देता है।
आइए देखें कि विभिन्न प्रकार के वेरिएबल्स के साथ उत्थापन कैसे काम करता है: var, Let, और const।
var के साथ, घोषणा और वेरिएबल दोनों फहराए जाते हैं। हालाँकि, केवल घोषणा को स्थानांतरित किया गया है, असाइनमेंट को नहीं।
console.log(a); // undefined var a = 10;
घोषणा संस्करण a फहराया गया है, लेकिन असाइनमेंट बाद में होता है, इसलिए लॉग इन करते समय a अपरिभाषित होता है।
लेट और कॉन्स्ट के साथ घोषित वेरिएबल भी फहराए जाते हैं, लेकिन उन्हें var की तरह अपरिभाषित में आरंभीकृत नहीं किया जाता है। इसके बजाय, वे अपने दायरे की शुरुआत से लेकर घोषणा का सामना होने तक टेम्पोरल डेड जोन (टीडीजेड) में प्रवेश करते हैं।
console.log(b); // ReferenceError: Cannot access 'b' before initialization let b = 20;
यहाँ, b फहराया गया है, लेकिन यह तब तक उपलब्ध नहीं है जब तक कि घोषणा की वास्तविक पंक्ति निष्पादित नहीं हो जाती, जिससे एक ReferenceError हो जाता है।
यही व्यवहार const पर लागू होता है, अतिरिक्त नियम के साथ कि घोषणा के समय const वेरिएबल को प्रारंभ किया जाना चाहिए।
फ़ंक्शन घोषणाएँ पूरी तरह से फहराई गई हैं, जिसका अर्थ है कि फ़ंक्शन नाम और बॉडी दोनों को दायरे के शीर्ष पर ले जाया गया है। यह आपको फ़ंक्शन घोषित होने से पहले कॉल करने की अनुमति देता है।
greet(); // "Hello, World!" function greet() { console.log("Hello, World!"); }
यहां, फ़ंक्शन डिक्लेरेशन ग्रीटिंग पूरी तरह से फहराया गया है, इसलिए फ़ंक्शन को कोड की परिभाषा तक पहुंचने से पहले भी कॉल किया जा सकता है।
फ़ंक्शन एक्सप्रेशन, हालांकि, उसी तरह से फहराए नहीं जाते हैं। चूँकि उन्हें असाइनमेंट के रूप में माना जाता है, केवल वेरिएबल घोषणा को फहराया जाता है - फ़ंक्शन परिभाषा को नहीं।
greet(); // TypeError: greet is not a function var greet = function() { console.log("Hello, World!"); };
इस मामले में, वेरिएबल ग्रीटिंग को फहराया जाता है, लेकिन इसे फहराने की प्रक्रिया के दौरान अपरिभाषित किया जाता है। इसीलिए असाइनमेंट से पहले greet() को कॉल करने से टाइप एरर उत्पन्न होता है।
उत्थापन के कारण होने वाले भ्रम से बचने के लिए, इन सर्वोत्तम प्रथाओं का पालन करें:
वेरिएबल्स को उनके दायरे के शीर्ष पर घोषित करें - हालांकि उत्थापन घोषणाओं को शीर्ष पर ले जाता है, लेकिन उन्हें उनके संबंधित दायरे की शुरुआत में घोषित करना एक अच्छा अभ्यास है। यह आपके कोड को अधिक पठनीय और पूर्वानुमानित बनाता है।
var के बजाय लेट और कॉन्स्ट का उपयोग करें - लेट और कॉन्स्ट के साथ घोषित वेरिएबल ब्लॉक-स्कोप्ड होते हैं, जो उत्थापन व्यवहार को स्पष्ट बनाता है और बग की संभावना कम होती है। यह आरंभीकरण से पहले गलती से वेरिएबल को संदर्भित करने की संभावना को भी कम कर देता है।
फ़ंक्शन घोषणाओं को व्यवस्थित करें - उत्थापन व्यवहार पर भरोसा करने से बचने के लिए अपने कार्यों का उपयोग करने से पहले उन्हें घोषित करें।
होइस्टिंग जावास्क्रिप्ट की कई विशेषताओं में से एक है, लेकिन यह कैसे काम करता है यह समझने से आपको साफ-सुथरा और कम त्रुटि-प्रवण कोड लिखने में मदद मिल सकती है। याद रखें कि जब फ़ंक्शन घोषणाएँ और वेरिएबल दोनों फहराए जाते हैं, तो वे अलग-अलग व्यवहार करते हैं। लेट और कॉन्स्ट ओवर वेर पर टिके रहें, और आश्चर्य से बचने के लिए अपने कोड को सुव्यवस्थित रखें।
होस्टिंग के प्रति सचेत रहकर, आप अपने जावास्क्रिप्ट कोड को अधिक पूर्वानुमानित और बनाए रखने में आसान बना सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3