2016-01-23 48 views
0

我對Ecmascript 6比較陌生。最近,我做了一個發現。我可以把這個取功能:爲什麼代碼裏面的=> {}需要返回,而裏面的內容=>沒有?

store.fetchList =() => { 
    const Document = Parse.Object.extend('Document') 
    const query = new Parse.Query(Document) 
    return query.find().then((results) => 
    _.map(results, (result) => 
     result.toJSON() 
    ) 
) 
} 

爲什麼是這樣的:

store.fetchList =() => { 
    const Document = Parse.Object.extend('Document') 
    const query = new Parse.Query(Document) 
    return query.find().then((results) => { 
    return _.map(results, (result) => { 
     return result.toJSON() 
    }) 
    }) 
} 

到這個(如果去掉大括號只需要第一回)? Ecmascript 5版本是什麼?

+0

因爲這是規範。任何有關箭頭功能的討論都會涵蓋這一點從MDN頁面:*箭頭功能可以有一個「簡潔的身體」或通常的「塊體」。塊體形式不會自動返回值。你需要使用一個明確的return語句。*如果你問**爲什麼**這是規範,你必須要求委員會成員或審查他們的審議記錄。 – 2016-01-23 06:41:00

回答

4

如果箭頭的功能只有一個表情,然後

  1. 你並不需要創建一個函數體

  2. 表達式的值默認返回。

什麼是JavaScript版本?

ECMAScript 6是JavaScript。如果你打算要求ECMAScript 5等價物,那麼這個沒有等價物。


如果有一個以上的表達,然後

  1. 我們需要內{}括起來,基本上我們需要創建一個塊(功能體)。

  2. 我們需要顯式返回值。


如果我們看一下艾睿功能ES 6規範,我們發現在this section

ArrowFunction[In, Yield] : 

    ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In] 

ConciseBody[In] : 

    [lookahead ≠ { ] AssignmentExpression[?In] 

    { FunctionBody } 

正如我們在這裏看到的語法,您可以使用{ FunctionBody }形式,或者AssignmentExpression表單(您沒有{})。但是如果使用FunctionBody表單,則需要顯式返回值。

3

注意兩個

(result) => { 
    return result.toJSON() 
} 

而且

(result) => 
    result.toJSON() 

將被寫成:

(function(result) { 
    return result.toJSON(); 
}).bind(this) 

在ES5。