यदि आप जावास्क्रिप्ट में नए हैं, तो आप भ्रमित करने वाली स्थितियों में आ सकते हैं, जहां चर अपरिभाषित प्रतीत होते हैं या ReferenceError जैसी त्रुटियां अप्रत्याशित रूप से सामने आती हैं। इसे अक्सर उत्थापन नामक अवधारणा से खोजा जा सकता है। लेकिन उत्थापन क्या है, और यह आपके कोड को कैसे प्रभावित करता है?
इस गाइड में, हम उत्थापन की अवधारणा का विश्लेषण करेंगे और यह जावास्क्रिप्ट में कैसे काम करता है। अंत तक, आप समझ जाएंगे कि उत्थापन क्यों होता है और आप सामान्य गलतियों से कैसे बच सकते हैं।
उत्थापन क्या है?
होइस्टिंग, कोड चलने से पहले वैरिएबल और फ़ंक्शन घोषणाओं को उनके दायरे के शीर्ष पर ले जाने का जावास्क्रिप्ट का व्यवहार है। इसका मतलब यह है कि घोषणाएं (असाइनमेंट नहीं) आपके कोड के वास्तविक निष्पादन से पहले तैयारी चरण के दौरान संसाधित की जाती हैं।
जावास्क्रिप्ट पहले एक निर्माण चरण से गुजरती है, जहां यह चर और कार्यों के लिए मेमोरी आवंटित करती है। हालाँकि, जिस तरह से यह फ़ंक्शंस और वेरिएबल्स को संभालता है वह थोड़ा अलग है।
फ़ंक्शन उत्थापन: पूर्णतः उत्थापन परिभाषाएँ
फ़ंक्शन कीवर्ड का उपयोग करके घोषित किए गए फ़ंक्शन को उनकी पूरी परिभाषा के साथ फहराया जाता है। यह आपको कोड में वास्तविक घोषणा से पहले किसी फ़ंक्शन को कॉल करने या उपयोग करने की अनुमति देता है।
उदाहरण के लिए:
sum(5, 3); // Output: 8 function sum(a, b) { console.log(a b); }
भले ही कोड में घोषित होने से पहले sum() फ़ंक्शन को कॉल किया जाता है, यह पूरी तरह से काम करता है क्योंकि फ़ंक्शन घोषणा को निर्माण चरण के दौरान इसके दायरे के शीर्ष पर फहराया जाता है।
परिवर्तनीय उत्थापन: var, Let, और const
वेरिएबल उत्थापन फ़ंक्शन उत्थापन से भिन्न व्यवहार करता है, और यह इस पर निर्भर करता है कि आप var, Let, या const का उपयोग करते हैं या नहीं।
1. var घोषणाएँ
जब आप var का उपयोग करके एक वैरिएबल घोषित करते हैं, तो इसे अपरिभाषित डिफ़ॉल्ट मान के साथ इसके दायरे के शीर्ष पर फहराया जाता है। इसका मतलब यह है कि आप वेरिएबल को उसकी घोषणा से पहले एक्सेस कर सकते हैं, लेकिन जब तक आप उसे कोई मान निर्दिष्ट नहीं करते, वेरिएबल अपरिभाषित रहेगा।
console.log(city); // Output: undefined var city = "New York"; console.log(city); // Output: "New York"
इस उदाहरण में, शहर को प्रारंभ में अपरिभाषित मान के साथ फहराया गया है। एक बार मान "न्यूयॉर्क" निर्दिष्ट हो जाने पर, दूसरा कंसोल.लॉग() सही ढंग से "न्यूयॉर्क" आउटपुट करता है।
2. लेट और कॉन्स्ट घोषणाएँ
लेट और कॉन्स्ट के साथ, वेरिएबल्स को भी फहराया जाता है, लेकिन वे अप्रारंभीकृत रहते हैं। इसका मतलब यह है कि यदि आप उनकी घोषणा से पहले उन तक पहुंचने का प्रयास करते हैं, तो आपको एक ReferenceError मिलेगा।
console.log(name); // ReferenceError: Cannot access 'name' before initialization let name = "John Doe";
यह त्रुटि इसलिए होती है क्योंकि लेट और कॉन्स्ट वैरिएबल अपने दायरे की शुरुआत और उस बिंदु के बीच टेम्पोरल डेड जोन (टीडीजेड) नामक किसी चीज़ में मौजूद होते हैं जहां वे वास्तव में घोषित होते हैं। इस दौरान, आप वेरिएबल का संदर्भ नहीं दे सकते।
लेट और कॉन्स्ट के बीच मुख्य अंतर
लेट और कॉन्स्ट दोनों उत्थापन के संदर्भ में समान व्यवहार करते हैं, लेकिन कॉन्स्ट के लिए आपको घोषणा के दौरान एक मान निर्दिष्ट करने की आवश्यकता होती है, जबकि लेट आपको तुरंत कोई मान निर्दिष्ट किए बिना एक चर घोषित करने की अनुमति देता है।
const name = "John Doe"; // Must be initialized let age; // Can be declared without assignment
प्रैक्टिस में उत्थापन
आइए एक उदाहरण देखें जो क्रिया में फ़ंक्शन और वेरिएबल उत्थापन दोनों को प्रदर्शित करता है:
console.log(city); // Output: undefined sum(3, 4); // Output: 7 function sum(x, y) { console.log(x y); } var city = "New York"; console.log(city); // Output: "New York"
यहां, योग फ़ंक्शन को उसकी पूरी परिभाषा के साथ फहराया गया है, इसलिए फ़ंक्शन घोषित होने से पहले इसे कॉल किया जा सकता है। हालाँकि, शहर को अपरिभाषित मान के साथ फहराया गया है, जो बताता है कि पहला कंसोल.लॉग() आउटपुट अपरिभाषित क्यों होता है। एक बार असाइनमेंट हो जाने पर, दूसरा कंसोल.लॉग() सही मान आउटपुट करता है।
उत्थापन के नुकसान से बचने के लिए युक्तियाँ
उत्तोलन के कारण होने वाली समस्याओं से बचने के लिए, इन सर्वोत्तम प्रथाओं का पालन करें:
प्रमुख उत्थापन अवधारणाओं का पुनर्कथन
होस्टिंग को समझकर, आप जावास्क्रिप्ट में सामान्य समस्याओं से बच सकते हैं और अधिक पूर्वानुमानित कोड लिख सकते हैं। अभ्यास के साथ, ये अवधारणाएँ दूसरी प्रकृति बन जाएंगी।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3