होइस्टिंग जावास्क्रिप्ट में उस प्रक्रिया को संदर्भित करता है जहां निष्पादन से पहले घोषणाएं की जाती हैं। वेरिएबल और फ़ंक्शन घोषणाओं को पहले संसाधित किया जाता है। परिणामस्वरूप, भले ही किसी वेरिएबल को उसकी घोषणा से पहले संदर्भित किया गया हो, इससे कोई त्रुटि नहीं होगी, बल्कि वह अपरिभाषित लौट आएगा। फ़ंक्शन घोषणाओं के लिए, संपूर्ण फ़ंक्शन फहराया जाता है, जिसका अर्थ है कि इसका उपयोग कोड में परिभाषित होने से पहले किया जा सकता है। यह प्रक्रिया निष्पादन शुरू होने से पहले घोषणाओं को स्टैक में रखती है।
var के साथ घोषित वेरिएबल को उत्थापन के दौरान अपरिभाषित के रूप में प्रारंभ किया जाता है।
फ़ंक्शन घोषणाएं पूरी तरह से फहराई जाती हैं और कोड में लिखे जाने से पहले उन्हें कॉल किया जा सकता है।
होस्टिंग प्रक्रिया यह सुनिश्चित करती है कि इन घोषणाओं को निष्पादन स्टैक में पहचाना जाए, चाहे कोड में उनकी स्थिति कुछ भी हो।
यह ध्यान रखना महत्वपूर्ण है कि केवल घोषणाएं फहराई जाती हैं, असाइनमेंट नहीं। असाइनमेंट वहीं रहते हैं जहां आपने उन्हें लिखा था।
नोट: जो लोग कहते हैं कि उत्थापन के दौरान कोड ऊपर चला जाता है, वे वास्तव में गलत हैं। कोड कभी ऊपर नहीं जाता।
console.log(myVariable); // undefined var myVariable = 10;
यह कोड एक साथ दो क्रियाएं करता है। सबसे पहले, यह वेरिएबल myVariable घोषित करता है और इसे दायरे में ले जाता है, लेकिन इसका मान अभी भी अपरिभाषित है। इसलिए, कंसोल.लॉग कमांड अप्रारंभीकृत मान को अपरिभाषित के रूप में प्रदर्शित करता है। उसके बाद, मान 10 myVariable को निर्दिष्ट किया गया है।
हालाँकि, यदि आप इसे बदलने का प्रयास करते हैं, तो इसका पिछली घोषणा पर कोई प्रभाव नहीं पड़ेगा। उदाहरण के लिए:
console.log(myVariable); // ReferenceError: myVariable is not defined myVariable = 10;
यहां, हमने myVariable वेरिएबल घोषित नहीं किया है, इसलिए इसे बदलने का प्रयास करने से पहले यह एक ReferenceError फेंकता है।
संक्षेप में, जावास्क्रिप्ट पहले सभी कोड को पढ़ता है और फिर असाइनमेंट को उनकी मूल स्थिति में रखते हुए सभी घोषणाओं को बाहर निकाल देता है। इस प्रक्रिया को उत्थापन के रूप में जाना जाता है।
var और Let दोनों जावास्क्रिप्ट में फहराए गए हैं, लेकिन उनका व्यवहार थोड़ा अलग है।
जब आप var का उपयोग करके एक वैरिएबल घोषित करते हैं, तो इसकी घोषणा को दायरे से बाहर कर दिया जाता है, और आप इसकी घोषणा से पहले वैरिएबल तक पहुंच सकते हैं, लेकिन इसका मान तब तक अपरिभाषित रहेगा जब तक इसे कोई मान नहीं दिया जाता है।
console.log(myVariable); // undefined var myVariable = 10;
उपरोक्त कोड में, डिक्लेरेशन var myVariable को दायरे से बाहर कर दिया गया है, लेकिन असाइनमेंट myVariable = 10 को जगह पर छोड़ दिया गया है। इसलिए, कंसोल.लॉग स्टेटमेंट अपरिभाषित आउटपुट देता है क्योंकि वेरिएबल मौजूद है लेकिन अभी तक कोई मान निर्दिष्ट नहीं किया गया है।
दूसरी ओर, जब आप लेट का उपयोग करके एक वेरिएबल घोषित करते हैं, तो उत्थापन व्यवहार थोड़ा अलग होता है। परिवर्तनीय घोषणा फहराई गई है, लेकिन आप इसकी घोषणा से पहले चर तक नहीं पहुंच सकते हैं। इसे "अस्थायी मृत क्षेत्र" के रूप में जाना जाता है। यदि आप किसी लेट वेरिएबल को उसकी घोषणा से पहले एक्सेस करने का प्रयास करते हैं, तो आपको एक ReferenceError मिलेगा।
console.log(myVariable); // ReferenceError: myVariable is not defined let myVariable = 10;
इस मामले में, लेट घोषणा को फहराया जाता है, लेकिन इसकी घोषणा से पहले वेरिएबल तक नहीं पहुंचा जा सकता है। इसलिए, कंसोल.लॉगस्टेटमेंट एक ReferenceError फेंकता है क्योंकि वेरिएबल को अभी तक परिभाषित नहीं किया गया है।
यहाँ मूल रूप से लेट के मामले में, भले ही ऊपर फहराया गया हो, चर का मान अपरिभाषित रहता है। क्योंकि उस वेरिएबल के लिए मेमोरी में कोई जगह नहीं है। इस कारण उस पते का उल्लेख नहीं कर सकते। क्योंकि मेमोरी में myVariable = 10 का कोई पता नहीं है, यह एक संदर्भ त्रुटि देता है।
कॉन्स्ट कीवर्ड आपको स्थिरांक बनाने की अनुमति देता है, जो वेरिएबल होते हैं जिन्हें एक बार मान निर्दिष्ट करने के बाद पुन: असाइन नहीं किया जा सकता है।
const PI = 3.142; PI = 22/7; // Attempt to reassign the value of PI console.log(PI); // Output: TypeError: Assignment to constant variable
इस उदाहरण में, हम पीआई को 3.142 के प्रारंभिक मान के साथ एक स्थिरांक के रूप में परिभाषित करते हैं। जब हम पीआई को एक नया मान पुन: असाइन करने का प्रयास करते हैं, तो एक टाइप एरर फेंक दिया जाता है क्योंकि स्थिरांक को पुन: असाइन नहीं किया जा सकता है।
const PI; console.log(PI); // Output: SyntaxError: Missing initializer in const declaration PI = 3.142;
इस मामले में, हम इसे आरंभ किए बिना एक स्थिर पीआई घोषित करते हैं। यह कोड एक सिंटैक्स त्रुटि उत्पन्न करता है क्योंकि स्थिरांक को एक ही समय में घोषित और प्रारंभ किया जाना चाहिए।
function getCircumference(radius) { console.log(circumference); circumference = PI * radius * 2; const PI = 22/7; } getCircumference(2); // ReferenceError: circumference is not defined
यहां, getCircumference फ़ंक्शन के भीतर, हम इसकी घोषणा से पहले परिधि तक पहुंचने का प्रयास करते हैं। यह एक ReferenceError फेंकता है क्योंकि वेरिएबल अभी तक परिभाषित नहीं है।
कॉन्स्ट का उपयोग करते समय, इसका उपयोग करने से पहले वेरिएबल को घोषित करना और प्रारंभ करना आवश्यक है।
कुल मिलाकर, var और Let दोनों जावास्क्रिप्ट में फहराए गए हैं, लेकिन उनका व्यवहार और अस्थायी मृत क्षेत्र की अवधारणा केवल लेट वेरिएबल्स पर लागू होती है। const ऐसे स्थिरांक बनाता है जिन्हें एक बार प्रारंभ करने के बाद पुन: असाइन नहीं किया जा सकता है।
function hoisted() { a = 20; var b = 100; } hoisted(); console.log(a); // 20 // can be accessed as a global variable outside the hoisted() function. console.log(b); // As it is declared, it is bound within the bounds of the hoisted() function. We cannot print it outside the hoisted() function. output: ReferenceError: b is not defined
हम देख सकते हैं कि फ़ंक्शन होइस्ट() के दायरे में var संदेश वेरिएबल की घोषणा फ़ंक्शन के शीर्ष पर जा रही है।
इस समस्या से बचने के लिए, हम यह सुनिश्चित करेंगे कि हम वेरिएबल का उपयोग करने से पहले उसे घोषित कर दें।
आपके द्वारा प्रदान किए गए दोनों उदाहरणों में, आउटपुट अपरिभाषित होगा।
function hoist() { console.log(message); var message = 'Hoisting is all the rage!'; } hoist(); // Output: undefined
function hoist() { var message; console.log(message); message = 'Hoisting is all the rage!'; } hoist(); // Output: undefined
दोनों मामलों में, आउटपुट अपरिभाषित है क्योंकि वेरिएबल्स को उनके संबंधित दायरे के शीर्ष पर फहराया जाता है लेकिन उनका असाइनमेंट कोड के मूल क्रम में बाद में होता है।
फ़ंक्शन एक्सप्रेशन फहराए नहीं जाते हैं, और एक टाइपएरर फेंकते हैं क्योंकि एक्सप्रेशन को एक वेरिएबल के रूप में माना जाता है न कि एक फ़ंक्शन के रूप में।
expression(); // Output: "TypeError: expression is not a function var expression = function() { console.log('Will this work?'); };
इसके नाम से, यह जावास्क्रिप्ट का एक प्रतिबंधित संस्करण है जो घोषित होने से पहले चर के उपयोग को बर्दाश्त नहीं करेगा। हमारे कोड को सख्त मोड में चलाना:
कुछ मूक जावास्क्रिप्ट त्रुटियों को स्पष्ट थ्रो त्रुटियों में बदलकर समाप्त करता है।
उन गलतियों को ठीक करता है जो जावास्क्रिप्ट इंजनों के लिए अनुकूलन करना कठिन बना देती हैं।
आप वेरिएबल घोषित करने से चूक सकते हैं, स्ट्रिक्ट का उपयोग करें जिसने आपको एक संदर्भ त्रुटि फेंककर रोक दिया है।
'use strict'; console.log(hoist); // Output: ReferenceError: hoist is not defined hoist = 'Hoisted';
वेरिएबल्स और फ़ंक्शंस की घोषणा करते समय जावास्क्रिप्ट में उत्थापन को समझना महत्वपूर्ण है, जैसा कि उत्थापन को समझाया गया है, आप समझ जाएंगे कि जावास्क्रिप्ट कोड वास्तव में कैसे संभाला जा रहा है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3