Почему `throw` недействителен в функции со стрелкой ES6? Я просто ищу причину, почему это неверно: () => throw 42; Я знаю, что могу обойти это через: () => {throw 42}; Ответ 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; }
Ответ 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; }