"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावास्क्रिप्ट में उत्थापन

जावास्क्रिप्ट में उत्थापन

2024-11-06 को प्रकाशित
ब्राउज़ करें:168

Hoisting in JavaScript

होइस्टिंग एक जावास्क्रिप्ट क्या है?

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

सरल शब्दों में:

  • 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 और 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 का कोई पता नहीं है, यह एक संदर्भ त्रुटि देता है।

स्थिरांक:

कॉन्स्ट कीवर्ड आपको स्थिरांक बनाने की अनुमति देता है, जो वेरिएबल होते हैं जिन्हें एक बार मान निर्दिष्ट करने के बाद पुन: असाइन नहीं किया जा सकता है।

उदाहरण:1

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 के प्रारंभिक मान के साथ एक स्थिरांक के रूप में परिभाषित करते हैं। जब हम पीआई को एक नया मान पुन: असाइन करने का प्रयास करते हैं, तो एक टाइप एरर फेंक दिया जाता है क्योंकि स्थिरांक को पुन: असाइन नहीं किया जा सकता है।

उदाहरण:2

const PI;
console.log(PI); // Output: SyntaxError: Missing initializer in const declaration
PI = 3.142;

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

उदाहरण:3

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 संदेश वेरिएबल की घोषणा फ़ंक्शन के शीर्ष पर जा रही है।
इस समस्या से बचने के लिए, हम यह सुनिश्चित करेंगे कि हम वेरिएबल का उपयोग करने से पहले उसे घोषित कर दें।

आपके द्वारा प्रदान किए गए दोनों उदाहरणों में, आउटपुट अपरिभाषित होगा।

उदाहरण:1

function hoist() {
  console.log(message);
  var message = 'Hoisting is all the rage!';
}
hoist(); // Output: undefined

उदाहरण:2

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';

निष्कर्ष

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

विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/nozibul_islam_113b1d5334f/hoisting-in-javascript-i3p?1 यदि कोई उल्लंघन है, तो इसे हटाने के लिए [email protected] पर संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3