2017-02-12 11 views
5

यह वास्तव में मेरे लिए भ्रामक था जावास्क्रिप्ट में इस वाक्य को पढ़ने के लिए:फ़ंक्शन परिभाषा में "... तर्क" (तीन बिंदु) का अर्थ क्या है?

router.route('/:id') 
.put((...args) => controller.update(...args)) 
.get((...args) => controller.findById(...args)); 

क्या मतलब करता है ... आर्ग?

+2

'... 'को स्प्रेड ऑपरेटर कहा जाता है। – bejado

+2

आमतौर पर, '... args' का अर्थ है "किसी भी संख्या में मूल्य"। उदाहरण के लिए, आप 'शून्य' या '1,2,3,4' पास कर सकते हैं - इससे कोई फर्क नहीं पड़ता और विधि इससे निपटने के लिए पर्याप्त स्मार्ट है। – Tigger

+1

यह ईएस 6 में पेश किया गया नया वाक्यविन्यास है। कृपया यहां प्रलेखन देखें https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters – Diode

उत्तर

2

सम्मान के साथ (...args) =>, ...argsrest parameter है। यह हमेशा पैरामीटर सूची में अंतिम प्रविष्टि होनी चाहिए और इसे एक सरणी असाइन की जाएगी जिसमें सभी तर्क शामिल हैं जिन्हें पिछले पैरामीटर को असाइन नहीं किया गया है।

यह मूल रूप से arguments object के प्रतिस्थापन है। इसके बजाय

function max() { 
    var values = Array.prototype.slice.call(arguments, 0); 
    // ... 
} 
max(1,2,3); 

लिखने की आप

function max(...value) { 
    // ... 
} 
max(1,2,3); 

भी लिख सकते हैं, तीर कार्यों के बाद से एक arguments वस्तु की जरूरत नहीं है, यह एक ही तरीका है variadic (तीर) कार्यों बनाने के लिए है।


controller.update(...args) के रूप में, What is the meaning of "foo(...arg)" (three dots in a function call)? देखते हैं।

8

अनिवार्य रूप से, क्या किया जा रहा है यह है:

.put((a, b, c) => controller.update(a, b, c)) 
बेशक

, क्या हुआ अगर हम 4 पैरामीटर या 5, या 6 करना चाहते हैं? हम सभी संभावित मात्राओं के पैरामीटर के लिए फ़ंक्शन का नया संस्करण नहीं लिखना चाहते हैं।

spread operator (...) हमें तर्कों की एक चर संख्या स्वीकार करने और उन्हें सरणी में स्टोर करने की अनुमति देता है। हम तो उन्हें update कार्य करने के लिए पारित करने के लिए फिर से फैल ऑपरेटर का उपयोग करें:

.put((...args) => controller.update(...args)) 

यह update समारोह, जो उन्हें सामान्य तर्क के रूप में प्राप्त करता है के लिए पारदर्शी है।

+1

['... 'ऑपरेटर नहीं है] (http://stackoverflow.com/ प्रश्न/37151966/व्हाट-इट-स्प्रेडेलेमेंट-इन-इज्मास्क्रिप्ट-डॉक्यूमेंट-इज़-द-द-ए-ए-स्प्रेड-ऑपर/37152508 # 37152508) और यह प्रसार के साथ कुछ भी नहीं है। –

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