2011-11-29 17 views
9

यह एक मूर्ख सवाल हो सकता है, लेकिन जावास्क्रिप्ट में फ़ंक्शन तर्क क्यों भिन्न कीवर्ड से पहले नहीं हैं?जावास्क्रिप्ट में तर्क क्यों भिन्न कीवर्ड से पहले नहीं हैं?

क्यों:

function fooAnything(anything) { 
    return 'foo' + anyThing; 
} 

और न: मैं एक महसूस कर जवाब because that's what the Spec says लेकिन अभी भी है

function fooAnything(var anything) { 
    return 'foo' + anyThing; 
} 

है ...

+0

आप वहां कीवर्ड क्यों चाहते हैं? 'var' घोषित चर, पैरामीटर (थोड़ा) अलग हैं। वहां कीवर्ड का कोई बिंदु नहीं है, इसमें कोई मूल्य नहीं है। –

+0

क्या यह पर्याप्त कारण नहीं है? var आपको क्या अतिरिक्त जानकारी देगा?इसके अलावा, आप प्रत्येक अक्षर को चार बार सहेजते हैं जब आप एक फ़ंक्शन var घोषित करते हैं जिसे आप स्पष्टता के लिए परिवर्तनीय नाम बनाने के लिए रख सकते हैं :)। – Asken

+1

क्योंकि ईसीएमए -262 औपचारिक पैरामीटर कहता है, घोषित चर जैसे, किसी भी कोड को निष्पादित करने से पहले स्थानीय परिवर्तनीय वस्तु के गुणों का नाम दिया जाता है। तो एक औपचारिक पैरामीटर डिफ़ॉल्ट रूप से कम या ज्यादा घोषित किया जाता है। – RobG

उत्तर

6

यह var कीवर्ड का एक अनावश्यक उपयोग होगा । फ़ंक्शन नाम घोषणा का पालन करने वाले कोष्ठक में दिखाई देने वाले आइटम फ़ंक्शन के लिए स्पष्ट रूप से पैरामीटर हैं।

+0

मैं कहूंगा कि वे फ़ंक्शन के लिए _explicitly_ पैरामीटर हैं। – nnnnnn

+0

@nnnnnn अच्छा बिंदु, मैंने अपना उत्तर –

2

var कीवर्ड चर के दायरे की घोषणा करता है। एक फ़ंक्शन तर्क भी उस तर्क के दायरे को प्रस्तुत करता है। इसलिए इसकी कोई आवश्यकता नहीं है, क्योंकि यह एक ही कार्य करता है।

7

अधिकांश गतिशीलता-टाइप की गई प्रोग्रामिंग भाषा तर्क सूची में स्पष्ट वर्र्स नहीं हैं। वर कीवर्ड के प्रयोजन के बीच "मैं एक मौजूदा चर की स्थापना कर रहा हूँ" और

var x = 17; //new variable 
x = 18; //old variable 

(केवल कुछ भाषाओं में "के रूप में मैं एक नया वैरिएबल बनाने से कर रहा हूँ", अजगर की तरह, दूर वर के साथ पूरी तरह से अलग करने के लिए जाना है लेकिन वहाँ के साथ कुछ मुद्दों, उदाहरण के लिए, बंद और आकस्मिक गलत वर्तनी की तो वर अभी भी व्यापक है)

लेकिन एक तर्क सूची में आप मौजूदा चर तो पिछले अस्पष्टता हल किया जा की जरूरत नहीं है करने के लिए असाइन नहीं कर सकते हैं। इसलिए, तर्क सूची में एक विविध घोषणा फिर से अनावश्यक बॉयलरप्लेट नहीं होगी। (और अनावश्यक बॉयलरप्लेट बुरा है - exibit एक में कोबोल देख)


आप शायद सी या जावा से लेकिन उनके मामले प्रकार घोषणाओं में अपने विचार हो रही है चर घोषणाओं के रूप में दोगुना और तर्क सूचियों में cruft के लिए है घोषणाओं के लिए प्रकार और नहीं।

हम कुछ टाइप की गई भाषाओं में भी "टाइपलेस, वैरलेस" तर्क सूची से दूर हो सकते हैं। हास्केल में, उदाहरण के लिए, प्रकारों का अनुमान लगाया जा सकता है ताकि आपको तर्क सूची पर उन्हें लिखने की आवश्यकता न हो।

f a b = --arguments are still variables, 
     -- but we don't need "let" or type definitions 
    let n = a + b in --extra variables still need to be declared with "let" 
    n + 17 
+1

अपडेट किया है यह एक अच्छा जवाब है, इसे कोई प्यार क्यों नहीं मिल रहा है :( – Esailija

+0

"लेकिन एक तर्क सूची में आप चर निर्दिष्ट नहीं कर सकते हैं" - कुछ भाषाएं आपको डिफॉल्ट असाइन करने की अनुमति देती हैं तर्क सूची में (जो लागू होता है अगर कॉलर द्वारा पैरामीटर प्रदान नहीं किए जाते हैं), लेकिन अगर जावास्क्रिप्ट को अनुमति है कि हमें अभी भी तर्क सूची की शुरुआत में 'var' की आवश्यकता नहीं होगी। – nnnnnn

1

मुझे लगता है कि: इस वजह से तर्क सूची बस चर नाम की वहाँ में (करने के लिए "वर" हास्केल के समकक्ष) होते हैं और जावास्क्रिप्ट के मामले में के रूप में हम डाल करने के लिए बाहरी "चलो" की जरूरत नहीं है सवाल उठता है क्योंकि हम कई भाषाओं में function bla (int i) देखने के लिए उपयोग किया जाता है। एक वैरिएबल घोषित करने के लिए फ़ंक्शन बॉडी में कहीं भी int i; के रूप में, समान रूप से, समान रूप से। दो int एस हालांकि ऐसा नहीं कर रहे हैं; पहला प्रकार को परिभाषित करता है, दूसरा टाइप प्रकार और दायरा को परिभाषित करता है। यदि आपको इस प्रकार की घोषणा करने की आवश्यकता नहीं है, तो दायरे-घोषणा अभी भी होने की आवश्यकता है (यही कारण है कि हमारे पास दूसरे मामले में var है) लेकिन तर्कों के सामने कोई जानकारी आवश्यक नहीं है।

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