web-dev-qa-db-ja.com

ES6の矢印関数で `throw`が無効なのはなぜですか?

なぜこれは無効であるという理由を探しています:

() => throw 42;

私はそれを回避できることを知っています:

() => {throw 42};
30
Mark Kahn

ブロックを使用しない場合({}矢印関数 の本体として、本体は でなければなりません:

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

ただし、throwステートメント であり、式ではありません。


理論的には

() => throw x;

と同等です

() => { return throw x; }

これも有効ではありません。

30
Felix Kling

できませんreturn throwこれは事実上あなたがやろうとしていることです:

function(){
  return throw 42;
}
2
Kit Sunde

矢印関数で中括弧を省略すると、 暗黙の戻り値 が作成されます。これは、次のように、中括弧を使用して明示的な戻り値を作成するのと同じです。() => { return throw 42 };

ただし、返すことができるのは expressions のみであり、 statements は返すことができません。そして、throwはステートメントです。

1
jabacchetta