Подтвердить что ты не робот

Почему `throw` недействителен в функции со стрелкой ES6?

Я просто ищу причину, почему это неверно:

() => throw 42;

Я знаю, что могу обойти это через:

() => {throw 42};
4b9b3361

Ответ 1

Если вы не используете блок ({}) как тело функции arrow, тело должно быть выражение:

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

Но throw является statement, а не выражением.


В теории

() => throw x;

эквивалентно

() => { return throw x; }

который также недействителен.

Ответ 2

Вы не можете return throw эффективно выполнять то, что вы пытаетесь сделать:

function(){
  return throw 42;
}