如何使用||的箭头功能操作者

时间:2016-09-30 15:32:32

标签: javascript ecmascript-6 arrow-functions

使用Babel,我可以看到

 callback = () => {};

编译到

callback = function callback() {};

这是我的期望。但是,当我尝试将其与||

一起使用时出现错误
callback = callback || () => {}

我希望等同于

 callback = callback || function(){};

为什么这是一个错误?另外,这个熟悉的语法有更正确的ES6版本吗?

3 个答案:

答案 0 :(得分:7)

失败,因为那只是无效的语法。

使用以下方法使其正常工作:

callback = callback || (() => {})

如果你不以这种方式包装它,它将被解释为你输入以下内容。但这是无效的语法。

callback = (callback || ()) => {}

要扩展评估的分配,请参阅AssignmentExpression的规范。它由ConditionalExpressionArrowFunction(或其他一些我将忽略的表达式)组成。因此,解释器将尝试将您的代码用作条件。但()本身在该上下文中无效,因为 中的表达式ParenthesizedExpression。结果,它将失败。如果您将表达式组合为callback || (() => {}) LogicalOrExpressions的两边都是有效的表达式。

答案 1 :(得分:4)

由于运算符优先级,您必须将箭头函数包装在括号中以使其工作:

callback = callback || (() => {})

答案 2 :(得分:2)

如果您计划使用||为函数提供回调参数的默认值,则更容易编写

function myfunc(callback = () => { }) {
  callback("Hi 1252748");
}

不需要额外的parens。