2017-04-21 16 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 

質問

は何がこれの原因は?それは意図的なものなのでしょうか?もしそうなら、なぜですか?同じ問題は、私はそれは私がそれを作るのに十分な知識豊富ではないんだけれども、むしろのみ||&&より一般的には短絡評価に関係していることを信じるようにつながる&&で発生

請求。

EDIT

()作品に矢印機能をラッピング!

重複した質問を申し訳ありませんが、狂ったように検索されましたが、明らかに狂気ではありません。それはちょうどちょうど括弧とそれを包む作業

+3

私はそれがコンパイラの翻訳方法に関するものだと思います。角括弧の別のペアを追加すると、それは動作します 'let a = false || ((data)=> data) ' –

+0

おそらく引数リストがどこから始まるのかという単純な構文上の曖昧さです。 – deceze

+1

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

答えて

5

を必要とする私のjavascriptの知識ではないのですが判明:

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

MDN docsから:

矢印関数の矢印はオペレータではありませんが、矢印関数には、通常の関数と比較して演算子の優先順位とは異なる動作をする特殊な解析規則があります。