【发布时间】:2015-11-13 14:21:40
【问题描述】:
我只是在寻找为什么这是无效的原因:
() => throw 42;
我知道我可以通过以下方式解决它:
() => {throw 42};
【问题讨论】:
标签: javascript ecmascript-6 arrow-functions
我只是在寻找为什么这是无效的原因:
() => throw 42;
我知道我可以通过以下方式解决它:
() => {throw 42};
【问题讨论】:
标签: javascript ecmascript-6 arrow-functions
如果您不使用块 ({}) 作为 arrow function 的主体,则主体必须是 expression:
ArrowFunction:
ArrowParameters[no LineTerminator here] => ConciseBody
ConciseBody:
[lookahead ≠ { ] AssignmentExpression
{ FunctionBody }
但throw 是statement,而不是表达式。
理论上
() => throw x;
等价于
() => { return throw x; }
这也是无效的。
【讨论】:
你不能return throw 这实际上是你想要做的:
function(){
return throw 42;
}
【讨论】:
如果在箭头函数中省略大括号,则会创建an implicit return,这相当于使用大括号创建显式返回,如下所示:() => { return throw 42 };
但是,您只能返回expressions,而不能返回statements。而throw 是一个声明。
【讨论】: