में स्थानीय स्कोप मैं Object-Oriented JavaScript by Stoyan Stefanovसमझौता वैश्विक और जावास्क्रिप्ट
उन्होंने एक उदाहरण के वैश्विक और स्थानीय गुंजाइश की तुलना प्रदान करता है का उपयोग कर जावास्क्रिप्ट सीखने किया गया है:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
इस उदाहरण को देखते हुए, मैं पहली बार चेतावनी के लिए उम्मीद '123' और दूसरा चेतावनी '1' होना चाहिए। लो और निहारना, Stoyan का कहना है:
आपको लगता है कि पहले चेतावनी() 123 ( का मूल्य वैश्विक चर एक) को प्रदर्शित करेगा उम्मीद कर सकते हैं और दूसरे को प्रदर्शित करेगा 1 (स्थानीय क)। यह मामला नहीं है। पहली चेतावनी "अपरिभाषित" दिखाएगी। यह है क्योंकि फ़ंक्शन के अंदर स्थानीय स्कोप वैश्विक दायरे से अधिक महत्वपूर्ण है। इसलिए एक स्थानीय चर के साथ किसी भी वैश्विक चर को ओवरराइट करता है। पहली चेतावनी के समय() को अभी तक परिभाषित नहीं किया गया था (इसलिए मान अपरिभाषित) लेकिन यह अभी भी स्थानीय स्थान पर मौजूद है।
स्पष्टीकरण मुझे स्पष्ट नहीं था, स्थानीय चर पहली वैश्विक चेतावनी में वैश्विक चर को कैसे ओवरराइट कर सकता है? किसी भी अन्य/अलग स्पष्टीकरण की सराहना की जाएगी।
धन्यवाद जुआन को दिखाने के लिए। मैं अनुमान लगा रहा हूं कि आप लेखकों के ओवरराइट के उपयोग के साथ समस्याएं उठाएंगे? मैंने सोचना शुरू कर दिया कि यह एक गलत नामक बी/सी था अगर मैं समारोह के बाहर चेतावनी (ए) कहता हूं, मुझे '123' मिलता है, जो कोई ओवरराइटिंग नहीं करता है लेकिन दो 'ए' चर, एक वैश्विक और एक स्थानीय। –
ओवरराइड सही शब्द नहीं है, स्थानीय चर ** ** वैश्विक चर को छायांकित करता है, लेकिन वास्तविक समस्या यह समझना है कि यदि आपके पास फ़ंक्शन के भीतर कहीं भी 'var' है, तो वैश्विक ** ** पूरे ** छायांकित है पूरे समारोह, इसे घोषित करने से पहले भी। –
धन्यवाद, यह उपयोगी और स्पष्टीकरण –