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};
If you don't use a block ({}
) as body of an arrow function, the body must be an expression:
ArrowFunction:
ArrowParameters[no LineTerminator here] => ConciseBody
ConciseBody:
[lookahead ≠ { ] AssignmentExpression
{ FunctionBody }
But throw
is a statement, not an expression.
In theory
() => throw x;
is equivalent to
() => { return throw x; }
which would not be valid either.
You can't return throw
this is effectively what you're trying to do:
function(){
return throw 42;
}
If you omit the braces in an arrow function, you create an implicit return, which is equivalent to creating an explicit return with the braces, like so: () => { return throw 42 };
However, you can only return expressions, not statements. And throw
is a statement.
来源:https://stackoverflow.com/questions/32109822/why-is-throw-invalid-in-an-es6-arrow-function