36

I'm just looking for a reason as to why this is invalid:

() => throw 42;

I know I can get around it via:

() => {throw 42};
4

3 回答 3

46

如果您不使用块 ( {}) 作为箭头函数的主体,则主体必须是表达式

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

Butthrow是一个语句,而不是一个表达式。


理论上

() => throw x;

相当于

() => { return throw x; }

这也无效。

于 2015-08-20T04:59:42.963 回答
4

你不能return throw这实际上是你想要做的:

function(){
  return throw 42;
}
于 2015-08-20T04:59:51.593 回答
2

如果在箭头函数中省略大括号,则会创建一个隐式 return,这相当于使用大括号创建一个显式 return ,如下所示:() => { return throw 42 };

但是,您只能返回表达式,不能返回语句。并且throw是一个声明。

于 2018-10-25T16:44:41.400 回答