2017-04-21 124 views
4

當使用箭頭功能並結合短路評估時,我遇到了意外的行爲。箭頭功能和短路評估

正如預期的那樣,在函數下面的代碼的結果被分配給:

let a = false || function(data) { return data } 

然而使用箭頭函數時此相同的主要拋出異常:

let a = false || (data) => data //SyntaxError: Unexpected token false 

儘管如此,如果您需要將箭頭函數分配給一個變量,然後執行「相同」操作,但將箭頭函數替換爲新變量(a)結果與您預期的一樣,函數被分配給變量(b):

let a = (data) => data 
let b = false || a //b = (data) => data 

問題

是什麼原因造成的?這是故意的嗎?如果是這樣,爲什麼?

注意

&&發生同樣的問題,認爲這使我它有做與一般的短路評價,而不是隻||&&雖然我沒有足夠的見地,以使該要求。

編輯

()作品結束語箭頭的功能!

對不起,重複的問題,瘋狂搜索,但顯然不夠瘋狂。原來,這是一個需要工作不只是我的JavaScript知識

+3

我想這是關於編譯器如何翻譯它的東西。如果你添加另一對括號,它會起作用 'let a = false || ((data)=> data)' –

+0

可能是一個關於參數列表應該在哪裏開始的簡單的語法歧義。 – deceze

+1

false || (data)=> data ===(false || data)=> data –

回答

5

只需用括號把它包裝:

let a = false || (data => data) 

從MDN docs

雖然箭頭功能箭頭不是一個運營商,箭頭函數具有特殊的分析規則,與常規函數相比,它們與運算符優先級的交互作用不同。