2015-06-19 6 views
18
(() => console.log(arguments))(1,2,3); 

// Chrome, FF, Node give "1,2,3" 
// Babel gives "arguments is not defined" from parent scope 

बेबेल के अनुसार (और जो मैं प्रारंभिक टीसी 3 9 सिफारिशों को बता सकता हूं), यह "अमान्य" है क्योंकि तीर कार्यों को तर्क के लिए अपने मूल दायरे का उपयोग करना चाहिए। एकमात्र जानकारी जो मैं यह समझने में सक्षम हूं कि यह विरोधाभास है, यह एक टिप्पणी है कि यह टीसी 3 9 द्वारा खारिज कर दिया गया था, लेकिन मुझे इसे वापस करने के लिए कुछ भी नहीं मिला।ईएस 6 तीर कार्यों में 'तर्क' पर आधिकारिक जानकारी?

बस यहां आधिकारिक दस्तावेज़ों की तलाश है।

+0

http://www.ecma-international.org/ecma -262/6.0/index.html # sec-arrow-function-definitions-runtime-semantics-मूल्यांकन - नोट्स –

उत्तर

24

क्रोम, एफएफ, और नोड यहाँ गलत होने लगते हैं, कोलाहल सही है:

तीर कार्यों एक खुद arguments उनके दायरे में बाध्यकारी नहीं है; उन्हें कॉल करते समय कोई तर्क वस्तु नहीं बनाई जाती है।

यहां सरकारी डॉक्स की तलाश में

तीर समारोह भाव कार्यों कि have their [[ThisMode]] setlexical के लिए, और जब इस तरह के declaration instantiation एक arguments object पैदा नहीं करता कहा जाता है के लिए मूल्यांकन करते हैं। यहां तक ​​कि एक निर्दिष्ट नोट भी है (18 ए) जिसमें कहा गया है कि "तीर कार्यों में कभी भी तर्क वस्तुएं नहीं होतीं।"।

17

जैसा कि बर्गी द्वारा उल्लेख किया गया है, तीर कार्यों में उनके arguments चर नहीं हैं।

हालांकि, अगर आप अपने तीर समारोह के लिए आर्ग पर कब्जा करना चाहते हैं, तो आप बस का उपयोग कर सकते एक rest parameter

const myFunc = (...args) => 
 
    console.log ("arguments", args) 
 
    
 
myFunc (1, 2, 3) 
 
// arguments [1, 2, 3]

+0

हाँ देखें, लेकिन इसका पारदर्शी संस्करण तर्कों पर लूप के लिए है; उल्लेखनीय रूप से अधिक कोड –

+1

'/ me shrugs' - मुझे लगता है कि मुझे ज्यादातर मामलों में पारदर्शी आउटपुट की परवाह नहीं है। अधिक कोड जोड़ा गया है, लेकिन ऐसा नहीं है कि यह काम नहीं करता है। यदि आप पारदर्शी आउटपुट की परवाह करते हैं, तो शायद आपको पहले स्थान पर एक ट्रांसलेटर का उपयोग नहीं करना चाहिए। मेरा मतलब है, बस जेनरेटर या विनाशकारी असाइनमेंट के लिए पारदर्शी आउटपुट देखें ... – naomik

+2

बिंदु यह है कि ईएस 6 आपको एक अधिक संक्षिप्त/अभिव्यक्तिपूर्ण/पठनीय * स्रोत * कोड प्रदान करता है। बिल्ड कोड आउटपुट इतनी देर तक कोई फर्क नहीं पड़ता क्योंकि यह अभी भी आपकी अपेक्षाओं को पूरा करता है। – naomik

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