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

125*_*748 7 javascript ecmascript-6 arrow-functions

使用Babel,我可以看到

 callback = () => {};
Run Code Online (Sandbox Code Playgroud)

编译成

callback = function callback() {};
Run Code Online (Sandbox Code Playgroud)

这是我所期待的.但是当我尝试使用它时出现错误||

callback = callback || () => {}
Run Code Online (Sandbox Code Playgroud)

我期望相当于

 callback = callback || function(){};
Run Code Online (Sandbox Code Playgroud)

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

str*_*str 7

它失败了,因为那只是无效的语法.

使用以下方法使其工作:

callback = callback || (() => {})
Run Code Online (Sandbox Code Playgroud)

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

callback = (callback || ()) => {}
Run Code Online (Sandbox Code Playgroud)

要扩展分配的评估,请参阅规范AssignmentExpression.它由一个ConditionalExpression或一个ArrowFunction(或其他一些我将忽略的表达式)组成.因此,解释器将尝试将您的代码用作条件.但是,()作为一种表达预计本身是不是在这方面有效的内部ParenthesizedExpression.结果,它将失败.如果您将表达式分组为有效表达式的callback || (() => {})两侧LogicalOrExpressions.


Mic*_*ski 5

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

callback = callback || (() => {})
Run Code Online (Sandbox Code Playgroud)

  • 优先顺序是什么? (6认同)