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

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан user633183 3 August 2016 в 06:54
поделиться

2 ответа

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

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

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


В теории

() => throw x;

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

() => { return throw x; }

, что также недействительно.

30
ответ дан Felix Kling 3 August 2016 в 06:54
поделиться

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

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

0
ответ дан jabacchetta 3 August 2016 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: