2013-11-01 7 views
63

मैं जावास्क्रिप्ट के लिए नया हूँ और मैं स्थानीय और वैश्विक चर स्कोप के बारे में कुछ प्रथाओं कर रहा था, के बाद मेरे कोड (fiddle) है अपरिभाषित के रूप में myname दिखा रहा है। इसलिए मेरा भ्रम है कि मैं myname के वैश्विक उदाहरण तक पहुंचने में सक्षम नहीं हूं और यदि मैं फ़ंक्शन के भीतर myname को परिभाषित नहीं करता हूं तो यह ठीक काम करेगा।जावास्क्रिप्ट स्थानीय और वैश्विक चर भ्रम

+1

यदि आप ** चेतावनी (window.myname) करते हैं; ** तो आपको मूल्य –

+0

@dholakiyaankit मिलेगा I window.myname का उपयोग करने का प्रयास किया है अभी भी यह अपरिभाषित है ... –

+0

@भारतनी विंडो.मेनाम मेरे काम करता है ब्राउज़र। – EmptyArsenal

उत्तर

6

यह वैश्विक चर को प्रतिस्थापित नहीं करता है। क्या हो रहा है उसे "वेरिएबल होस्टिंग" कहा जाता है। वह है, var myname; फ़ंक्शन के शीर्ष पर डाला जाता है। हमेशा अपने चर को प्रारंभ करने से पहले उनका का उपयोग करें - इस प्रयास करें:

var myname = "initial"; 
 

 
function c() { 
 
    alert(myname); 
 
    myname = "changed"; 
 
    alert(myname); 
 
} 
 

 
c();

+0

महोदय, मैं सिर्फ मूल्य बदलने की कोशिश नहीं कर रहा हूं .. आप जो कर रहे हैं वह वैश्विक चर के मूल्य को बदल रहा है .. मैं अवधारणा को समझना चाहता हूं "क्यों" यह हो रहा है ... –

+0

यह चेतावनी की समस्या को हल करता है अपरिभाषित, लेकिन यह किसी भी स्थानीय चर को समाप्त करता है क्योंकि यह केवल वैश्विक चर 'myname' का उपयोग कर रहा है। – EmptyArsenal

+0

यह वैश्विक चर को प्रतिस्थापित नहीं करता है। क्या हो रहा है उसे "वेरिएबल होस्टिंग" कहा जाता है। यही है, मेरा नाम var मेरा नाम; समारोह के शीर्ष पर डाला जाता है। अपने उपयोग से पहले अपने चर को हमेशा प्रारंभ करें, आप इसे http://stackoverflow.com/questions/11938961/understanding-global-local-scope-in-javascript?rq=1 –

42

जावास्क्रिप्ट में, चर घोषणाओं स्वचालित रूप से समारोह की चोटी पर ले जाया जाता है। तो, दुभाषिया इसे और अधिक दिखता है:

var myname = "initial" 
function c(){ 
    var myname; 
    // alerts undefined 
    alert(myname); 
    myname = "changed"; 
    // alerts changed 
    alert(myname); 
} 
c(); 

इसे 'hoisting' कहा जाता है।

उछाल के कारण और तथ्य यह है कि किसी भी चर के लिए दायरा यह घोषित किया गया है कि यह इस भ्रम से बचने के लिए एक समारोह के शीर्ष पर सभी चर सूचीबद्ध करने का मानक अभ्यास है।

+0

देख सकते हैं जो मुझे समझा है, इसलिए अब स्थानीय चर के रूप में एक ही नाम के साथ एक वैश्विक चर का उपयोग करने के लिए रास्ता .. ?? –

+2

आपको 'window.myname' करके इसे एक्सेस करने में सक्षम होना चाहिए। यहां देखें: http://stackoverflow.com/questions/15826751/access-overridden-global-variable-inside-a- कार्यक्षमता लेकिन वैश्विक चर आमतौर पर एक अच्छा अभ्यास नहीं माना जाता है, और ज्यादातर मामलों में यह परिभाषित करना बेहतर होगा एक वैश्विक वस्तु और इसके माध्यम से इसका उपयोग करें। यानी 'var me = {myname: "प्रारंभिक"}' फिर फ़ंक्शन में 'me.myname' को कॉल करें। – EmptyArsenal

+1

यह कहना सही नहीं है कि वैरिएबल घोषणा शीर्ष पर ले जाया गया है। उदाहरण के लिए यदि लाइन 10 पर यह var myname = "प्रारंभिक" लिखा गया है, तो परिणाम हम देखते हैं कि लाइन 1 पर var myname = "प्रारंभिक" जैसा नहीं है, लेकिन असल में हम व्यवहार देखते हैं जैसे var myname लाइन 1 पर और लाइन पर है 10 यह मूल्य असाइन किया गया है यानी myname = "प्रारंभिक" –

संबंधित मुद्दे