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

虽然箭头功能箭头不是一个运营商,箭头函数具有特殊的分析规则,与常规函数相比,它们与运算符优先级的交互作用不同。