नहीं है बिल्कुल कोई फर्क अर्थ या प्रदर्शन में, जावास्क्रिप्ट या ActionScript में।
varपार्सर के लिए एक निर्देश है, और रन-टाइम पर निष्पादित कमांड नहीं है। यदि किसी varफ़ंक्शन बॉडी (*) में किसी विशेष पहचानकर्ता को एक या अधिक बार घोषित किया गया है , तो ब्लॉक में उस पहचानकर्ता का सभी उपयोग स्थानीय चर का जिक्र होगा। इससे कोई फ़र्क नहीं पड़ता कि लूप के अंदर, लूप के बाहर, या दोनों के रूप valueमें घोषित किया गया है varया नहीं।
नतीजतन आपको जो भी सबसे अधिक पठनीय लगता है, उसे लिखना चाहिए। मैं क्रॉकफ़ोर्ड से असहमत हूं कि एक समारोह के शीर्ष पर सभी वार्स रखना हमेशा सबसे अच्छी बात है। उस मामले के लिए जहां कोड के एक अनुभाग में अस्थायी रूप से एक चर का उपयोग किया जाता है, varउस अनुभाग में घोषित करना बेहतर होता है , इसलिए यह खंड अकेला खड़ा होता है और इसे कॉपी-पेस्ट किया जा सकता है। अन्यथा, कोड की कुछ पंक्तियों को कॉपी-पेस्ट करने के दौरान एक नए फ़ंक्शन को रिफैक्टरिंग के दौरान, अलग-अलग उठाकर और संबद्ध को स्थानांतरित किए बिना var, और आपने खुद को एक आकस्मिक वैश्विक बना लिया है।
विशेष रूप से:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
क्रॉकफोर्ड आपको दूसरे को हटाने var(या दोनों को हटाने varऔर var i;ऊपर करने के लिए) की सिफारिश करेगा, और jslint इसके लिए आप पर चिल्लाएगा। लेकिन IMO यह दोनों को बनाए रखने के लिए अधिक रखरखाव योग्य हैvar फ़ंक्शन के शीर्ष पर एक अतिरिक्त, आसानी से भूले हुए बिट के बजाय सभी संबंधित कोड को एक साथ ।
व्यक्तिगत रूप से मैं varकोड के एक स्वतंत्र खंड में एक चर के पहले असाइनमेंट के रूप में घोषित करता हूं , चाहे एक ही फ़ंक्शन के किसी अन्य भाग में एक ही चर नाम का एक और अलग उपयोग हो या न हो। मेरे लिए, varसभी को घोषित करना एक अवांछनीय जेएस मस्सा है (यह बेहतर होगा कि चर स्थानीय रूप से डिफ़ॉल्ट हों); मैं इसे जावास्क्रिप्ट में ANSI C [[के एक पुराने संशोधन] की सीमाओं की नकल करने के लिए अपने कर्तव्य के रूप में नहीं देखता।
(*: नेस्टेड फ़ंक्शन बॉडी के अलावा)