जेएस के लिए प्रलेखन पढ़ने के दौरान मैंने पाया कि जेएस फ़ंक्शन में उपयोग किए गए और घोषित नहीं किए गए चर को फहराया जाएगा और वैश्विक दायरा बन जाएगा

console.log(x);

function trial() {
  x = 5;
  console.log(x);
}
trial();

पहली पंक्ति मुझे एक त्रुटि देता है "VM48: 1 ध्यान में न आया संदर्भ त्रुटि: x पर परिभाषित नहीं है: 1:13" लेकिन जब मैं शीर्ष पर var x घोषित करता हूं

var x;
console.log(x);

function trial() {
  x = 5;
  console.log(x);
}
trial();

अब पहला कंसोल प्रिंट अपरिभाषित है जब अघोषित चर को फहराया जाता है, तो x को वैश्विक दायरे में क्यों नहीं भेजा जाता है और मुझे पहले मामले में अपरिभाषित देता है?

-1
abhishek vashistha 4 सितंबर 2021, 00:52

2 जवाब

सबसे बढ़िया उत्तर

"जेएस फ़ंक्शन में उपयोग किए गए और घोषित नहीं किए गए चर को फहराया जाएगा और एक वैश्विक दायरा बन जाएगा।"

यह पूरी तरह सच नहीं है। मुझे नहीं पता कि आप जो दस्तावेज़ पढ़ रहे हैं उसका स्रोत क्या है, लेकिन या यह गलत है या आपने इसका गलत अर्थ निकाला है।

यदि आप किसी ऐसे चर को मान निर्दिष्ट करते हैं जिसे घोषित नहीं किया गया है, तो उसे फहराया नहीं जाएगा। यह सिर्फ एक वैश्विक चर होने जा रहा है। इसलिए, आपके उदाहरण में, आप अपवाद प्राप्त करने के बजाय केवल "5" प्रिंट करने जा रहे हैं यदि आप उस फ़ंक्शन के बाहर console.log(x) चलाने से पहले trial() फ़ंक्शन पहले चलाते हैं।

trial();
console.log(x);

function trial() {
  x = 5;
  console.log(x);
}
1
BSdoukos 3 सितंबर 2021, 22:29

आपका पहला उदाहरण कुछ भी फहराता नहीं है - उत्थापन केवल var का उपयोग करते समय होता है, और आपके पहले उदाहरण में यह फ़ंक्शन की पहली पंक्ति की परवाह किए बिना था। उत्थापन कुछ इस प्रकार होगा (जहां var x ऊपर की ओर "फहराया" जाता है - लेकिन 5 का आरंभीकरण नहीं होता है, लेकिन y बिल्कुल भी नहीं फहराया जाता है ):

console.log(x);
console.log(y);
function trial(){
    console.log(x);
}
trial();
var x = 5;
y = 5

या, और भी स्पष्ट होने के लिए:

var x = 5;
console.log(x); // 5;
(() => {
    // hoisted: var x;
    console.log(x); // undefined;
    var x = 6;
    console.log(x); // 6
})();
0
dave 3 सितंबर 2021, 21:56