Ich suche nur nach einem Grund, warum dies ungültig ist:

() => throw 42;

Ich weiß, dass ich es umgehen kann über:

() => {throw 42};
36
Nobody 20 Aug. 2015 im 07:56

3 Antworten

Beste Antwort

Wenn Sie keinen Block ({}) als Textkörper eines Pfeilfunktion, der Körper muss eine Ausdruck :

ArrowFunction:
    ArrowParameters[no LineTerminator here] => ConciseBody

ConciseBody:
    [lookahead ≠ { ] AssignmentExpression
    { FunctionBody }

Aber throw ist eine Anweisung , kein Ausdruck.


In der Theorie

() => throw x;

Ist äquivalent zu

() => { return throw x; }

Das wäre auch nicht gültig.

36
Felix Kling 20 Aug. 2015 im 05:05

Wenn Sie die geschweiften Klammern in einer Pfeilfunktion weglassen, erstellen Sie eine implizite Rückgabe, die dem Erstellen einer expliziten Rückgabe mit geschweiften Klammern entspricht, wie folgt: () => { return throw 42 };

Sie können jedoch nur Ausdrücke zurückgeben, nicht < a href = "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements" rel = "nofollow noreferrer"> Anweisungen . Und throw ist eine Aussage.

1
jabacchetta 25 Okt. 2018 im 16:44

Sie können nicht return throw dies ist effektiv, was Sie versuchen zu tun:

function(){
  return throw 42;
}
4
Kit Sunde 20 Aug. 2015 im 04:59