使用Babel,我可以看到
callback = () => {};
编译到
callback = function callback() {};
这是我的期望。但是,当我尝试将其与||
callback = callback || () => {}
我希望等同于
callback = callback || function(){};
为什么这是一个错误?另外,这个熟悉的语法有更正确的ES6版本吗?
答案 0 :(得分:7)
失败,因为那只是无效的语法。
使用以下方法使其正常工作:
callback = callback || (() => {})
如果你不以这种方式包装它,它将被解释为你输入以下内容。但这是无效的语法。
callback = (callback || ()) => {}
要扩展评估的分配,请参阅AssignmentExpression
的规范。它由ConditionalExpression
或ArrowFunction
(或其他一些我将忽略的表达式)组成。因此,解释器将尝试将您的代码用作条件。但()
本身在该上下文中无效,因为 中的表达式ParenthesizedExpression
。结果,它将失败。如果您将表达式组合为callback || (() => {})
LogicalOrExpressions
的两边都是有效的表达式。
答案 1 :(得分:4)
由于运算符优先级,您必须将箭头函数包装在括号中以使其工作:
callback = callback || (() => {})
答案 2 :(得分:2)
如果您计划使用||
为函数提供回调参数的默认值,则更容易编写
function myfunc(callback = () => { }) {
callback("Hi 1252748");
}
不需要额外的parens。