var
अकेले असाइनमेंट नहीं करता है। यह केवल ध्वजांकित करता है कि जब आप var
पर पूरे चर के चर नाम का उपयोग करते हैं, तो आप स्थानीय चर के बारे में बात कर रहे हैं, न कि वैश्विक (विवादास्पद डिफ़ॉल्ट)। जब समारोह पार्स और उस दायरे में रखती है var
देखा जाता है, इसलिए जहां डाल यह अप्रासंगिक है:
global a= 0, local a= 1
में
var a= 0;
function foo() {
a= 1;
return a;
var a;
}
var b= foo();
alert('global a='+a+', local a='+b);
परिणाम: भले ही var
बयान foo()
के निष्पादन के पाठ्यक्रम में कभी नहीं किया जाता है, यह a
स्थानीय चर बनाने में अभी भी प्रभावी है।
तो var x
एक ही दायरे में दूसरी बार घोषित करना पूरी तरह से अनावश्यक है। हालांकि आप कभी-कभी ऐसा कर सकते हैं, आमतौर पर जब आप एक ही फ़ंक्शन के भीतर दूसरे स्वतंत्र उपयोग के लिए स्थानीय चर नाम का पुन: उपयोग करते हैं। सबसे अधिक:
for (var i= 0; i<onething.length; i++) {
...do some trivial loop...
}
for (var i= 0; i<anotherthing.length; i++) {
...do another trivial loop...
}
जबकि आप निश्चित रूप से दूसरे var
, और उपकरणों jslint
तरह की मांग करेंगे आप ऐसा करते हैं छोड़ सकता है, यह वास्तव में एक अच्छा विचार हो नहीं सकता है।
कल्पना करें कि बाद में आप पहले लूप को बदल या हटा दें ताकि यह i
को var
घोषित न करे। अब शेष दूसरा पाश अचानक स्थानीय से वैश्विक चर में अर्थ बदलता है। यदि आप पहली लूप को अपडेट करते समय नोटिस करने में विफल रहते हैं कि दूसरी लूप पर उस पर एक छिपी निर्भरता है (और आप यह भी ध्यान में रखते हुए असफल हो सकते हैं कि आंखें पैटर्न को for(...=0 ; ...<...; ...++)
में "ओह, यह सिर्फ एक मानक इटरेटर" है, आपको एक सूक्ष्म और कष्टप्रद-से-डीबग समस्या मिली है।
आपके प्रश्न की सामग्री एक विशिष्ट उदाहरण है, जिसका उत्तर नीचे दिया गया है। हालांकि, मैंने पाया कि [यह जवाब] (http://stackoverflow.com/a/12889928/983430) एक समान प्रश्न के लिए जेनेरिक केस का जवाब देता है (जब/जावास्क्रिप्ट चर को फिर से चलाने का उपयोग क्यों किया जाएगा?) के शीर्षक में पूछा गया आपका सवाल वास्तव में अच्छा है। –