दिलचस्प पोस्ट
जावा में int के लिए सुरक्षित रूप से कास्टिंग स्क्रॉल किए जाने वाले डिवेल में फ़ॉज़न तालिका हैडर जब एक अभियुक्त विफल हो जाता है, तो पायथन की एकजुटता में जारी रहना मैं पायथन सूची से प्रथम आइटम कैसे निकालूं? पायथन के लिए क्या आईडीई का उपयोग करना है? रिटर्न स्टेटमेंट के बिना सी ++ रिटर्न वेल्यू वायरलेस आईफोन ऐप वितरण – आईटीएमएस-सर्विसेज प्रोटोकॉल के साथ समस्या ओपनसीवी ओर्ब एक बार रोटेशन / स्केल इनवाइरियन्स पेश करने के बाद मिलान नहीं ढूंढ रहा है एसक्यूएल विभाजन मूल्यों को कई पंक्तियों में AppCompat-v7 21 के साथ एक्शनबार / टूलबार में आइकन दिखाएं __प्रोटो__ कन्स्ट्रक्टर से कैसे भिन्न होता है। प्रोटोपीप? किस क्षेत्र में एफ # का उपयोग सी # से अधिक उपयुक्त हो सकता है? मैं WPF में कस्टम रूट कमांड कैसे जोड़ूं? क्या एक तैयार कथन से ऑटोइन्किमेंट आईडी को पुनर्प्राप्त करने का कोई तरीका है? पायथन में कोड रिपॉजिटरी के साथ काम करते समय संसाधनों के सापेक्ष पथ को कैसे संदर्भित करें

ग्लोबल जावास्क्रिप्ट व्हेरिएबल स्कोप: यह काम क्यों नहीं करता है?

इसलिए मैं जावास्क्रिप्ट के साथ खेल रहा हूं और मुझे एक विषमता के रूप में मिल रहा है। क्या कोई निम्नलिखित को समझा सकता है? (मैंने टिप्पणियों के रूप में सतर्क मूल्यों को शामिल किया है)

एफयू () के अंदर पहली चेतावनी (msg) क्यों अपरिभाषित है और बाहर नहीं है?

var msg = 'outside'; function foo() { alert(msg); // undefined var msg = 'inside'; alert(msg); // inside } foo(); alert(msg); // outside 

इन दोनों कामों को ध्यान में रखते हुए:

 var msg = 'outside'; function foo() { alert(msg); // outside } alert(msg); // outside 

तथा:

 var msg = 'outside'; function foo() { var msg = 'inside'; alert(msg); // inside } alert(msg); // outside 

Solutions Collecting From Web of "ग्लोबल जावास्क्रिप्ट व्हेरिएबल स्कोप: यह काम क्यों नहीं करता है?"

आपके पहले उदाहरण में जो कुछ हो रहा है वह घोषणा है कि msg की घोषणा और initlization को बंद होने के ऊपर घोषित होने के साथ विभाजित किया जा रहा है।

 var msg; //declaration msg = "inside" //initialization 

इसलिए आपके द्वारा लिखे गए कोड समान बात है

 var msg = 'outside'; function foo() { var msg; alert(msg); // undefined msg = 'inside'; alert(msg); // inside } 

दूसरा उदाहरण एक समान नहीं है। आपके दूसरे उदाहरण में आपने एक स्थानीय चर संदेश घोषित नहीं किया है ताकि चेतावनी (msg) वैश्विक संदेश को संदर्भित करता है। यहां पर कुछ और पढ़ रहे हैं: होस्टिंग

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

आपका पहला उदाहरण:

 var msg = 'outside'; function foo() { var msg; alert(msg); // undefined msg = 'inside'; alert(msg); // inside } alert(msg); // outside 

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

तीसरे उदाहरण में, आप स्पष्ट रूप से वेरिएबल की घोषणा करते हैं और इसका उपयोग करने से पहले उसे एक मान निर्दिष्ट करते हैं, इसलिए जब आप alert(msg) , तो स्थानीय, निर्धारित चर को सतर्क कर दिया जाता है।

http://www.irt.org/script/1321.htm से :

यदि हम एक वैरिएबल को एक फ़ंक्शन के अंदर वेरिएबल के रूप में घोषित नहीं करते हैं, लेकिन यह क्षेत्र में स्थानीय होना चाहिए, लेकिन पूरे समारोह में undefined होना चाहिए, जब तक वह यह नहीं है [प्रारंभिक] …

यह आपके लिए काम करेगा:

 var msg = 'outside'; function foo() { alert(window.msg); // outside var msg = 'inside'; alert(msg); // inside } alert(msg); // outside foo(); alert(msg); // still "outside" 

var एक घोषणा नहीं है यह एक भ्रम है जो कई लोगों को मिक्स करता है बल्कि, var एक व्याप्ति-चौड़ी एनोटेशन है। एक क्षेत्र के अंदर 'var' का स्थान कोई फर्क नहीं पड़ता।

जावा में जावा एक एनोटेशन है, वक्तव्य नहीं है

आप पूरी तरह से जावा स्क्रिप्ट कार्यों के निष्पादन को नियंत्रित कर सकते हैं और तर्क के रूप में चर को पार कर सकते हैं,

यहां इस मामले में आप के अंदर फ़ंक्शन मौजूद हैं, बाहर की चर का उपयोग नहीं कर सकते । लेकिन यदि आप उपयोग करना चाहते हैं तो आप चर के भीतर उस मान को एक्सेस करने के लिए चर तर्क डालते हैं।

 var msg = 'outside'; function foo(msg) { alert(msg); // outside var msg = 'inside'; alert(msg); // inside } foo(msg); alert(msg); // outside 

इस डेमो जेएसफिल्ड की जाँच करें

और एक अन्य चर जी के अंदर आप परिभाषित करते हैं, एक 'निजी' चर ( फ़ंक्शन गुंजाइश के साथ ) है, इसलिए फ़ंक्शन के अंदर उसकी "अंदर" मान अलर्ट है। आशा है कि यह आपकी मदद करे!