जावास्क्रिप्ट में उत्थापन
होइस्टिंग एक ऐसा व्यवहार है जिसमें वेरिएबल और फ़ंक्शन घोषणाएं को उनके युक्त स्कोप (या तो वैश्विक स्कोप या फ़ंक्शन स्कोप) के शीर्ष पर ले जाया जाता है (या "होइस्टेड") किया जाता है। कोड निष्पादित है. इसका मतलब यह है कि आप वेरिएबल और फ़ंक्शंस का उपयोग कोड में वास्तव में घोषित होने से पहले कर सकते हैं।
चरों में उत्थापन
वर
- var के साथ घोषित वेरिएबल्स को उनके दायरे के शीर्ष पर फहराया जाता है, लेकिन उनके मूल्यों को कोड के उस बिंदु तक प्रारंभ नहीं किया जाता है जहां असाइनमेंट होता है।
console.log(x); // undefined
var x = 5;
console.log(x); // 5
चलो और स्थिरांक
- लेट और कॉन्स्ट के साथ घोषित वेरिएबल भी फहराए जाते हैं लेकिन उनकी घोषणा पूरी होने तक उन्हें "अस्थायी मृत क्षेत्र" में रखा जाता है। घोषित होने से पहले उन्हें एक्सेस करने पर ReferenceError आएगा।
console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 10;
// block scope
{
let x = 5;
}
console.log(x); // ReferenceError: x is not defined
कार्यों में उत्थापन
पारंपरिक समारोह
- फ़ंक्शन घोषणाएँ पूरी तरह से फहराई गई हैं, जिसका अर्थ है कि घोषणा और फ़ंक्शन बॉडी दोनों को दायरे के शीर्ष पर ले जाया गया है। यह आपको किसी फ़ंक्शन को कोड में उसकी घोषणा से पहले कॉल करने की अनुमति देता है।
sayHello(); // "Hello!"
function sayHello() {
console.log("Hello!");
}
- इसके विपरीत, फ़ंक्शन एक्सप्रेशन (जहां एक फ़ंक्शन को एक वेरिएबल को असाइन किया जाता है) को केवल वेरिएबल के रूप में फहराया जाता है, इसलिए वेरिएबल शुरू होने से पहले उन्हें कॉल करने से अपरिभाषित या टाइप एरर हो जाएगा।
greet(); // TypeError: greet is not a function
var greet = function () {
console.log("Hi!");
};
greet(); // ReferenceError: Cannot access 'one' before initialization
let greet = function () {
console.log("Hi!");
};
तीर फ़ंक्शन
- इसके विपरीत, फ़ंक्शन एक्सप्रेशन (जहां एक फ़ंक्शन को एक वेरिएबल को असाइन किया जाता है) को केवल वेरिएबल के रूप में फहराया जाता है, इसलिए वेरिएबल शुरू होने से पहले उन्हें कॉल करने से अपरिभाषित या टाइप एरर हो जाएगा।
greet(); // TypeError: greet is not a function
var greet = () => {
console.log("Hi!");
};
greet(); // ReferenceError: Cannot access 'one' before initialization
let greet = function () {
console.log("Hi!");
};
टेम्पोरल डेड जोन (टीडीजेड)
टेम्पोरल डेड जोन (टीडीजेड) लेट और कॉन्स्ट का उपयोग करके घोषित वेरिएबल्स के लिए मौजूद है क्योंकि जावास्क्रिप्ट को घोषित और आरंभ होने से पहले आपको इन वेरिएबल्स तक पहुंचने से रोकने के लिए डिज़ाइन किया गया है।
क्यों var और Let, const उत्थापन में अलग-अलग व्यवहार करते हैं
- यह जावास्क्रिप्ट में ऐतिहासिक विकास के कारण है।
- प्रारंभ में, जावास्क्रिप्ट उन उपयोगकर्ताओं के लिए डिज़ाइन किया गया था जो डेवलपर नहीं हैं, और जावास्क्रिप्ट का मुख्य मुख्य उपयोग वेबपेज पर छोटे इंटरैक्टिव तत्वों को जोड़ना था।
- इसलिए var केवल कार्यात्मक दायरे का समर्थन करता है। साथ ही उस समय कोई ब्लॉक स्कोप नहीं था।
- लेकिन जावास्क्रिप्ट के बाद के विकास में, var के साथ काम करना और बग्स को ठीक करना अधिक जटिल हो गया।
- इसलिए जावास्क्रिप्ट को अन्य आधुनिक भाषाओं के साथ प्रतिस्पर्धी बनाने के लिए, अधिक सुविधाएँ जोड़ी गईं जैसे कि लेट, कॉन्स्ट, एरो फ़ंक्शन, ईएस6 विधियाँ, आदि।
var को Let और const की तरह अपडेट क्यों नहीं किया जाता है
- यह पिछड़ी संगतता के कारण है।
- उस समय, कई उद्यमों द्वारा जावास्क्रिप्ट का व्यापक रूप से उपयोग किया जाता था, इसलिए मौजूदा सुविधाओं में अपडेट करने या बदलाव करने से कोडबेस टूट जाएगा।
- इसलिए, आधुनिक सुविधाओं को व्यक्तिगत रूप से जोड़ा गया।
सामान्य साक्षात्कार प्रश्न
- जावास्क्रिप्ट में उत्थापन क्या है?
- जावास्क्रिप्ट में क्या फहराया गया है, और क्या नहीं?
- उत्थापन के संबंध में var, Let, और const के बीच क्या अंतर है?
- जावास्क्रिप्ट में टेम्पोरल डेड जोन (टीडीजेड) क्या है?
- क्या आप फ़ंक्शन घोषणाओं बनाम फ़ंक्शन अभिव्यक्तियों के साथ उत्थापन की व्याख्या कर सकते हैं?
- ईएस6 मॉड्यूल में उत्थापन क्या है?
- हमें वास्तविक दुनिया कोड में उत्थापन पर भरोसा करने से क्यों बचना चाहिए?
सारांश
- होइस्टिंग जावास्क्रिप्ट में डिफ़ॉल्ट व्यवहार है जहां संकलन चरण के दौरान चर और फ़ंक्शन घोषणाओं को उनके संबंधित दायरे के शीर्ष पर ले जाया जाता है।
- होस्टिंग केवल var और पारंपरिक फ़ंक्शंस के साथ घोषित वेरिएबल्स के लिए काम करता है, लेट, कॉन्स्ट और एरो फ़ंक्शंस के लिए नहीं।
- केवल फ़ंक्शन घोषणा फहराई जाती है, इसलिए पारंपरिक फ़ंक्शन काम करते हैं, लेकिन यदि फ़ंक्शन को एक चर को सौंपा गया है, तो इसे परिभाषित होने तक कॉल करने योग्य नहीं होगा।
- इसका कारण यह है कि var और पारंपरिक फ़ंक्शंस को फहराया जाता है, लेकिन लेट, कॉन्स्ट और एरो फ़ंक्शंस को नहीं, क्योंकि प्रारंभिक चरण में, जावास्क्रिप्ट का उपयोग ज्यादातर छोटे यूआई इंटरैक्शन के लिए किया जाता था।
- लेकिन बाद में, चूंकि उद्यमों द्वारा अनुप्रयोगों के निर्माण के लिए जावास्क्रिप्ट का व्यापक रूप से उपयोग किया जाने लगा, केवल वैश्विक दायरे के साथ बग को ठीक करना कठिन हो गया।
- इसलिए भविष्य के अपडेट में, अधिक सुरक्षित चिंताओं का समाधान किया गया।
- इसके अतिरिक्त, मौजूदा सुविधाओं को अपडेट करने से कोडबेस टूट जाता, इसलिए नई सुविधाएं अलग से जोड़ी गईं।