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

javascript ecmascript-6 arrow-functions

3028 просмотра

3 ответа

66514 Репутация автора

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

() => throw 42;

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

() => {throw 42};
Автор: Mark Kahn Источник Размещён: 20.08.2015 04:56

Ответы (3)


31 плюса

599640 Репутация автора

Решение

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

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

Но throwэто утверждение , а не выражение.


В теории

() => throw x;

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

() => { return throw x; }

который не будет действительным либо.

Автор: Felix Kling Размещён: 20.08.2015 04:59

2 плюса

21574 Репутация автора

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

function(){
  return throw 42;
}
Автор: Kit Sunde Размещён: 20.08.2015 04:59

0 плюса

8886 Репутация автора

Если вы опускаете фигурные скобки в функции стрелки, вы создаете неявный возврат , который эквивалентен созданию явного возврата с фигурными скобками, например:() => { return throw 42 };

Однако вы можете возвращать только выражения , а не утверждения . И throwэто заявление.

Автор: jabacchetta Размещён: 25.10.2018 04:44
Вопросы из категории :
32x32