我只是在寻找为什么这是无效的原因:
() => throw 42;
我知道我可以通过以下方式解决这个问题:
() => {throw 42};
答案 0 :(得分:30)
如果您不使用块{}
)作为arrow function的正文,则正文必须为expression:
ArrowFunction:
ArrowParameters[no LineTerminator here] => ConciseBody
ConciseBody:
[lookahead ≠ { ] AssignmentExpression
{ FunctionBody }
但是throw
是statement,而不是表达式。
理论上
() => throw x;
相当于
() => { return throw x; }
也无效。
答案 1 :(得分:2)
你不能return throw
这实际上是你要做的事情:
function(){
return throw 42;
}
答案 2 :(得分:0)
如果在箭头函数中省略括号,则将创建an implicit return,这等效于使用括号创建显式返回,例如:() => { return throw 42 };
但是,您只能返回expressions,而不能返回statements。 throw
是一个声明。