为什么逻辑或运算符(||)带有空箭头函数(()=> {})会导致语法错误?

时间:2017-03-08 18:25:59

标签: javascript arrow-functions

在我的代码中,我有一些归结为:

var x = y || ()=>{};

(如果您想知道,我稍后调用x()并且y可能被定义为函数或者它可能没有,所以我不希望抛出TypeError如果它是不。)

出于某种原因,这会导致

  

SyntaxError:意外的令牌)

为什么呢?我发现了

var x = y || (()=>{});

工作正常,但

y || ()=>{}

不能工作。这是推测,还是V8或Chrome中的错误? (我仅在Chrome稳定版的最新版本中对此进行了测试。)

3 个答案:

答案 0 :(得分:7)

这很正常。与function表达式不同,PrimaryExpression与其他文字和标识符一样,箭头函数具体为AssignmentExpression,只能出现在分组,逗号,赋值,条件(三元)和屈服表达。除此之外的任何其他运算符都会导致含糊不清。

例如,如果您希望y || ()=>z能够正常工作,那么预期()=>z || y也应该起作用(假设对称优先)。然而,这显然与我们期望我们可以在箭头函数的简洁体内使用任何运算符相冲突。因此,它是一个语法错误,需要明确的分组才能工作并保持可维护状态。

答案 1 :(得分:2)

这不是JavaScript引擎中的错误。记录此行为。

  

虽然箭头函数中的箭头不是运算符,但箭头函数具有特殊的解析规则,与常规函数相比,它们与运算符优先级的交互方式不同。

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Parsing_order

答案 2 :(得分:0)

试试这个var x =( y || (()=>{}));