2015-02-27 23 views
364

जब एक तीर समारोह से एक वस्तु लौटने, ऐसा लगता है कि यह व्याकरण में एक अस्पष्टता की वजह से एक अतिरिक्त सेट {} और एक वापसी कथन का उपयोग करने के लिए आवश्यक है:ECMAScript6 तीर समारोह है कि एक वस्तु देता है

p => { return { foo: 'bar' } }

तीर समारोह कुछ और देता है, तो {} और बदले अनावश्यक हैं, जैसे:?

p => 'foo'

वहाँ कुछ स्पष्ट मुझे याद आ रही है

उत्तर

632

आपको रिटर्निंग ऑब्जेक्ट शब्दशः कोष्ठक में लपेटना होगा। अन्यथा घुंघराले ब्रेसिज़ को फ़ंक्शन के शरीर को दर्शाने के लिए माना जाएगा। निम्नलिखित काम करता है:

p => ({ foo: 'bar' }); 

आप कोष्ठक में किसी अन्य अभिव्यक्ति रैप करने के लिए की जरूरत नहीं है:

p => 10; 
p => 'foo'; 
p => true; 
p => [1,2,3]; 
p => null; 
p => /^foo$/; 

और इतने पर।

+4

मैं उत्सुक हूं * क्यों * माता-पिता एक अंतर बनाते हैं। – wrschneider

+18

@wrschneider क्योंकि माता-पिता के बिना जेएस पार्सर सोचता है कि यह एक फ़ंक्शन बॉडी है, ऑब्जेक्ट नहीं है, और foo [लेबल] है (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/लेबल) – alexpods

+7

ब्रांड्स में अक्षरों को लपेटने से संकेत मिलता है कि ब्रेसिज़ फ़ंक्शन बॉडी के बजाए ऑब्जेक्ट शाब्दिक होते हैं। –

37

आप सोच रहे होंगे क्यों वाक्य रचना मान्य है (लेकिन काम नहीं कर के रूप में उम्मीद):

var func = p => { foo: "bar" } 

यह JavaScript's label syntax की वजह से है:

तो अगर आप ES5 करने के लिए उपरोक्त कोड transpile, यह देखना चाहिए जैसे:

var func = function (p) { 
    foo: 
    "bar"; //obviously no return here! 
} 
2

यदि तीर का शरीर घुंघराले ब्रेसिज़ में लपेटा गया है, तो यह पूरी तरह से वापस नहीं आ गया है। ऑब्जेक्ट को ब्रांड्स में लपेटें। यह ऐसा कुछ दिखता है।

p => ({ foo: 'bar' }) 

कोष्ठक में शरीर लपेटकर रखकर समारोह { foo: 'bar } वापस आ जाएगी।

उम्मीद है कि यह आपकी समस्या हल करता है। यदि नहीं, तो मैंने हाल ही में तीर कार्यों के बारे में एक लेख लिखा है जो इसे अधिक विस्तार से कवर करता है। मुझे उम्मीद है कि आप इसे उपयोगी पाएँ। Javascript Arrow Functions

+4

अपने ब्लॉग पर एक लिंक पोस्ट करना समस्याग्रस्त है। कृपया पढ़ें [स्पैमर कैसे नहीं बनें] (/ सहायता/पदोन्नति)। – tripleee

+3

बस अपनी लाइब्रेरी या ट्यूटोरियल से लिंक करना एक अच्छा जवाब नहीं है। इससे जुड़ा हुआ, यह बताते हुए कि यह समस्या का हल क्यों करता है, इस बारे में कोड प्रदान करने के तरीके और इसे अस्वीकार करने के बारे में कोड प्रदान करना बेहतर जवाब देता है। देखें: [** क्या "अच्छा" आत्म प्रचार को दर्शाता है? **] (// meta.stackexchange.com/q/182212) –

+0

निश्चित रूप से मैंने पहले वाक्य में सवाल का जवाब दिया था? स्पैमर नहीं होने के बारे में मार्गदर्शिका की जांच करने के बाद, मुझे लगता है कि मेरा जवाब दिशानिर्देशों के भीतर आता है। –

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