为什么ES6箭头函数中的`throw`无效?

时间:2015-08-20 04:56:43

标签: javascript ecmascript-6 arrow-functions

我只是在寻找为什么这是无效的原因:

() => throw 42;

我知道我可以通过以下方式解决这个问题:

() => {throw 42};

3 个答案:

答案 0 :(得分:30)

如果您不使用块{})作为arrow function的正文,则正文必须为expression

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

但是throwstatement,而不是表达式。

理论上

() => throw x;

相当于

() => { return throw x; }

也无效。

答案 1 :(得分:2)

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

function(){
  return throw 42;
}

答案 2 :(得分:0)

如果在箭头函数中省略括号,则将创建an implicit return,这等效于使用括号创建显式返回,例如:() => { return throw 42 };

但是,您只能返回expressions,而不能返回statementsthrow是一个声明。