如何使用 || 的箭头函数操作员

How to use arrow function with || operator

使用 Babel,我可以看到

 callback = () => {};

编译为

callback = function callback() {};

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

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

我希望相当于

 callback = callback || function(){};

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

失败是因为语法无效。

使用以下命令使其工作:

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

如果你不这样包装,它会被解释为你输入了以下内容。但这是无效语法。

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

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

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

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

如果您打算使用 || 为函数的回调参数提供默认值,那么只写

会更容易
function myfunc(callback = () => { }) {
  callback("Hi 1252748");
}

不需要额外的括号。