उत्तर: होइस्टिंग निष्पादन संदर्भ के निर्माण चरण के दौरान की प्रक्रिया है जहां मेमोरी को चर और कार्यों के लिए आवंटित किया जाता है। इस प्रक्रिया के दौरान, वेरिएबल्स के लिए मेमोरी आवंटित की जाती है, और वेरिएबल्स को अपरिभाषित मान सौंपा जाता है। फ़ंक्शंस के लिए, संपूर्ण फ़ंक्शन परिभाषा को मेमोरी में एक विशिष्ट पते पर संग्रहीत किया जाता है, और इसका एक संदर्भ उस विशेष निष्पादन संदर्भ में स्टैक पर रखा जाता है।
उत्तर: वेरिएबल उत्थापन तब होता है जब एक वेरिएबल की घोषणा को उसके दायरे के शीर्ष पर ले जाया जाता है। दूसरी ओर, फ़ंक्शन उत्थापन तब होता है जब उसके शरीर सहित संपूर्ण फ़ंक्शन को उसके दायरे के शीर्ष पर ले जाया जाता है।
उत्तर: होइस्टिंग एक जावास्क्रिप्ट तंत्र है जहां कोड निष्पादन शुरू होने से पहले चर और फ़ंक्शन घोषणाओं को उनके दायरे के शीर्ष पर ले जाया जाता है। उत्थापन के कारण, हम घोषित होने से पहले वेरिएबल का उपयोग कर सकते हैं।
वेरिएबल उत्थापन: जब एक वेरिएबल घोषित किया जाता है, तो इसे इसके दायरे के शीर्ष पर ले जाया जाता है, और हम कोड में इसकी घोषणा से पहले भी उस वेरिएबल का उपयोग कर सकते हैं।
फ़ंक्शन उत्थापन: जब किसी फ़ंक्शन को फहराया जाता है, तो संपूर्ण फ़ंक्शन बॉडी को उसके दायरे के शीर्ष पर ले जाया जाता है। इसका मतलब है कि हम कोड में इसकी घोषणा से पहले भी फ़ंक्शन को कॉल कर सकते हैं।
उत्तर: यदि आप एक वेरिएबल घोषित करते हैं लेकिन उसे कोई मान निर्दिष्ट नहीं करते हैं, तो वेरिएबल का कोई मूल्य नहीं माना जाता है। जावास्क्रिप्ट होस्टिंग के दौरान वेरिएबल डिक्लेरेशन को शीर्ष पर ले जाता है, लेकिन वेरिएबल को अभी तक कोई मान नहीं दिया गया है। वेरिएबल को अपरिभाषित असाइन किया गया है, जिसका अर्थ है कि वेरिएबल को अभी तक कोई मान प्राप्त नहीं हुआ है।
उत्तर: यदि आप एक ही चर को एक ही दायरे में दो बार घोषित करते हैं, तो दूसरी घोषणा पहले को अधिलेखित कर देगी, और पहली घोषणा का मान दूसरे से बदल दिया जाएगा। ऐसा इसलिए होता है क्योंकि जावास्क्रिप्ट पहली घोषणा को मेमोरी में संग्रहीत करता है, और जब इसका सामना दूसरे से होता है, तो यह पिछले मान को अधिलेखित कर देता है।
उत्तर: हां, जावास्क्रिप्ट में, आप var के बजाय लेट या कॉन्स्ट का उपयोग करके वेरिएबल्स फहरा सकते हैं। जबकि var का पारंपरिक रूप से उपयोग किया गया है, इसमें दायरे से संबंधित कुछ मुद्दे हैं, यही कारण है कि इसे लेट या कॉन्स्ट का उपयोग करने की अनुशंसा की जाती है।
उदाहरण के साथ उदाहरण:
let myVariable = 42; console.log(myVariable); // Output: 42
स्थिरांक के साथ उदाहरण:
const pi = 3.14159; console.log(pi); // Output: 3.14159
लेट और कॉन्स्ट के साथ घोषित वेरिएबल्स में ब्लॉक-स्तरीय स्कोप होता है, जिसका अर्थ है कि वे उस ब्लॉक (जैसे फ़ंक्शन, लूप या स्टेटमेंट) तक ही सीमित हैं जहां उन्हें परिभाषित किया गया है। लेट पुन:असाइनमेंट की अनुमति देता है, जबकि स्थिरांक का उपयोग स्थिरांक के लिए किया जाता है और इसे पुन: असाइन नहीं किया जा सकता है।
उत्तर: एक फ़ंक्शन घोषणा को उसके दायरे के शीर्ष पर फहराया जाता है, जबकि एक फ़ंक्शन अभिव्यक्ति को नहीं। इसका मतलब यह है कि आप किसी फ़ंक्शन को उसकी परिभाषा से पहले फ़ंक्शन घोषणा के साथ कॉल कर सकते हैं, लेकिन आप फ़ंक्शन अभिव्यक्ति के साथ ऐसा नहीं कर सकते।
उत्तर: एक फहराए गए चर का दायरा इस बात पर निर्भर करता है कि इसे कहां घोषित किया गया है। यदि वेरिएबल को किसी फ़ंक्शन के अंदर घोषित किया गया है, तो इसका दायरा उस फ़ंक्शन तक सीमित है, जिसका अर्थ है कि इसे इसके बाहर तक नहीं पहुँचा जा सकता है। यदि किसी वेरिएबल को किसी फ़ंक्शन के बाहर घोषित किया जाता है, तो इसका एक वैश्विक दायरा होता है, जिसका अर्थ है कि इसे कोड में कहीं से भी एक्सेस किया जा सकता है।
उत्तर: जावास्क्रिप्ट में होइस्टिंग को पूरी तरह से रोका नहीं जा सकता है, लेकिन आप अपना कोड इस तरह से लिख सकते हैं कि इसके कारण होने वाली संभावित समस्याओं से बचा जा सके। ऐसा करने का एक तरीका सभी वेरिएबल्स और फ़ंक्शंस को उनके दायरे के शीर्ष पर घोषित करना है।
उपरोक्त कोड उदाहरणों में, सभी वेरिएबल्स और फ़ंक्शंस को var या Let का उपयोग करके उनके ब्लॉक के शीर्ष पर घोषित किया गया है। यह सुनिश्चित करता है कि वेरिएबल और फ़ंक्शंस उनके ब्लॉक के भीतर फहराए जाते हैं और उनके दायरे के शीर्ष पर दिखाई देते हैं।
यह विधि कोड प्रवाह और चर मानों को अधिक पूर्वानुमानित बनाती है, जो परिवर्तनशीलता और संभावित बग को कम करने में मदद करती है।
उत्तर: यदि आप पूरी तरह से नहीं समझते हैं कि यह कैसे काम करता है, तो होइस्टिंग संभावित समस्याओं का कारण बन सकती है, जिसके परिणामस्वरूप अप्रत्याशित व्यवहार हो सकता है। उदाहरण के लिए, यदि आप किसी ब्लॉक स्टेटमेंट के अंदर एक वेरिएबल घोषित करते हैं और इसे ब्लॉक के बाहर एक्सेस करने का प्रयास करते हैं, तो वेरिएबल को फ़ंक्शन या वैश्विक दायरे के शीर्ष पर फहराया जा सकता है, जो कि आपका इरादा नहीं हो सकता है।
ब्लॉक स्कोप और उत्थापन: एक ब्लॉक के अंदर घोषित वेरिएबल्स को अभी भी उनके दायरे के शीर्ष पर फहराया जा सकता है।
डिबगिंग कठिनाई: होस्टिंग से डीबग करना कठिन हो सकता है क्योंकि आप जिस मान या वेरिएबल तक पहुंचने का प्रयास कर रहे हैं वह अपेक्षा के अनुरूप व्यवहार नहीं कर सकता है।
फ़ंक्शन परिभाषा विचित्रताएं: फ़ंक्शंस को उनके दायरे के शीर्ष पर फहराया जाता है, लेकिन आप हमेशा उन्हें अपनी अपेक्षा के अनुसार उपयोग नहीं कर सकते हैं।
इन उत्थापन मुद्दों से निपटने के लिए, अपने चर और कार्यों को स्पष्ट रूप से घोषित करना और यह समझना महत्वपूर्ण है कि आपके कोड के भीतर उत्थापन कैसे काम करता है।
उत्तर: हां, जावास्क्रिप्ट में होस्टिंग कोड निष्पादन शुरू होने से पहले वेरिएबल और फ़ंक्शन घोषणाओं को उनके संबंधित दायरे के शीर्ष पर ले जाता है। यह कोड निष्पादन के अपेक्षित प्रवाह को बदल सकता है।
उत्थापन के साथ, आप एक वैरिएबल घोषित कर सकते हैं और वास्तव में परिभाषित होने से पहले इसका उपयोग कर सकते हैं, जो कोड निष्पादन के अपेक्षित क्रम को बदल सकता है और अनपेक्षित परिणामों को जन्म दे सकता है।
उदाहरण के लिए, यदि आप स्क्रिप्ट की शुरुआत में फ़ंक्शंस को परिभाषित नहीं करते हैं और बाद में उनका उपयोग करते हैं, तो उन्हें शीर्ष पर फहराया जाएगा, जिससे संभावित रूप से कोड में अप्रत्याशित प्रवाह और व्यवहार पैदा होगा।
उत्तर: var घोषणाओं को उनके दायरे के शीर्ष पर फहराया जाता है, जबकि Let घोषणाओं को उनके ब्लॉक के शीर्ष पर फहराया जाता है। इसका मतलब यह है कि लेट के साथ घोषित वेरिएबल्स को उनके ब्लॉक के बाहर एक्सेस नहीं किया जा सकता है।
आइए इसे स्पष्ट करने के लिए एक उदाहरण देखें:
function example() { console.log(x); // undefined var x = 5; console.log(x); // 5 } example(); console.log(x); // ReferenceError: x is not defined
यहाँ, var x = 5; फ़ंक्शन दायरे के शीर्ष पर फहराया गया है। हालाँकि, जब घोषणा से पहले कंसोल.लॉग(x) को कॉल किया जाता है, तो उत्थापन के कारण मान अपरिभाषित होता है।
अब आइए एक उदाहरण देखें:
function example() { console.log(y); // ReferenceError: y is not defined let y = 10; console.log(y); // 10 } example(); console.log(y); // ReferenceError: y is not defined
यहाँ, मान लीजिए y = 10; इसके ब्लॉक स्कोप के शीर्ष पर फहराया गया है, लेकिन इसकी घोषणा से पहले इसे एक्सेस करने का प्रयास करने पर ReferenceError होता है।
संक्षेप में, var वेरिएबल्स को फ़ंक्शन स्कोप के शीर्ष पर फहराया जाता है, जबकि Let वेरिएबल्स को उनके ब्लॉक के शीर्ष पर फहराया जाता है।
उत्तर: यदि आप घोषित होने से पहले एक फहराए गए चर तक पहुंचने का प्रयास करते हैं, तो इसका मूल्य अपरिभाषित होगा।
उत्तर: एरो फ़ंक्शन जावास्क्रिप्ट में नहीं लहराए जाते हैं, इसलिए आप एरो फ़ंक्शन को परिभाषित होने से पहले कॉल नहीं कर सकते।
// This will work function regularFunction() { console.log("This is a regular function"); } regularFunction(); // "This is a regular function"
// This will not work arrowFunction(); // TypeError: arrowFunction is not a function const arrowFunction = () => { console.log("This is an arrow function"); };
यहां, रेगुलरफ़ंक्शन फहराया गया है और इसे इसकी परिभाषा से पहले बुलाया जा सकता है, लेकिन एरोफ़ंक्शन फहराया नहीं गया है, इसलिए इसकी परिभाषा से पहले इसे कॉल करने से त्रुटि होगी।
उत्तर: हां, किसी फ़ंक्शन के भीतर उत्थापन हो सकता है। इसका मतलब यह है कि किसी फ़ंक्शन के अंदर घोषित वेरिएबल या फ़ंक्शन उस फ़ंक्शन के दायरे के शीर्ष पर फहराए जाते हैं।
उत्तर: जावास्क्रिप्ट में, स्कोप श्रृंखला एक चर के मूल्य को देखने के लिए जावास्क्रिप्ट इंजन द्वारा उपयोग किए जाने वाले स्कोप का पदानुक्रम है। स्कोप श्रृंखला में वर्तमान फ़ंक्शन का दायरा, बाहरी फ़ंक्शन स्कोप और वैश्विक दायरा शामिल है।
स्कोप श्रृंखला एक चर के मूल्य को खोजने के लिए चरण-दर-चरण प्रक्रिया के रूप में काम करती है। यदि किसी फ़ंक्शन के अंदर कोई वेरिएबल या फ़ंक्शन घोषित किया जाता है, तो जावास्क्रिप्ट इंजन पहले उस फ़ंक्शन के दायरे को देखता है। यदि वहां मान नहीं मिलता है, तो यह बाहरी फ़ंक्शन की खोज करता है और इस प्रक्रिया को तब तक जारी रखता है जब तक कि यह वैश्विक दायरे तक नहीं पहुंच जाता।
इस तरह, जावास्क्रिप्ट वेरिएबल मान खोजने के लिए स्कोप श्रृंखला का उपयोग करता है और जहां वेरिएबल परिभाषित किया गया है उसके अनुसार श्रृंखला को अपडेट करता है।
उत्तर:
console.log(a); var a = 10; Output: undefined
उत्तर:
ReferenceError: a परिभाषित नहीं है
इस मामले में, a को लेट का उपयोग करके घोषित किया जाता है, जिसका अर्थ है कि इसे इसके दायरे के शीर्ष पर नहीं फहराया गया है। चूँकि a को console.log()स्टेटमेंट से पहले परिभाषित नहीं किया गया है, इसलिए एक संदर्भ त्रुटि उत्पन्न होती है।
उत्तर:
var a = 5; (function() { console.log(a); // undefined var a = 10; })(); Output: undefined
इस प्रक्रिया को पूरी तरह से समझने के लिए, आइए इसे चरण-दर-चरण तोड़ें:
पहली पंक्ति में, var a = 5; वैश्विक दायरे में 5 के मान के साथ एक वेरिएबल a बनाता है।
फिर, तुरंत बुलाए गए फ़ंक्शन एक्सप्रेशन (IIFE) को परिभाषित और कॉल किया जाता है।
फ़ंक्शन के अंदर, console.log(a); का मान मुद्रित करने का प्रयास करता है। हालाँकि, क्योंकि var a = 10; फ़ंक्शन के भीतर घोषित किया गया है, स्थानीय चर a को फ़ंक्शन के दायरे से बाहर ले जाया गया है, लेकिन इसका मान अभी तक निर्दिष्ट नहीं किया गया है, इसलिए यह अपरिभाषित प्रिंट करता है।
उसके बाद, var a = 10; 10 के मान के साथ स्थानीय दायरे में एक नया वैरिएबल बनाता है।
इस प्रकार, पहला console.log(a); उत्थापन के कारण अपरिभाषित प्रिंट होता है, और घोषणा के बाद, a का मान 10 पर अद्यतन किया जाता है।
उत्तर:
function test() { console.log(a); var a = 10; console.log(a); } test(); Output: undefined 10
फ़ंक्शन टेस्ट() को दो कंसोल.लॉग() स्टेटमेंट्स के साथ परिभाषित किया गया है:
पहले कंसोल.लॉग(ए) में; वेरिएबल a को फ़ंक्शन के भीतर घोषित किया गया है लेकिन अभी तक कोई मान निर्दिष्ट नहीं किया गया है, इसलिए यह अपरिभाषित प्रिंट करता है।
दूसरे कंसोल में.लॉग(ए); वेरिएबल a को मान 10 दिया गया है, जो 10 के रूप में मुद्रित होता है।
इस प्रकार, जब फ़ंक्शन को कॉल किया जाता है, तो पहला console.log(a); अपरिभाषित प्रिंट करता है, और दूसरा console.log(a); प्रिंट 10.
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3