Ich suche nur nach einem Grund, warum dies ungültig ist:
() => throw 42;
Ich weiß, dass ich es umgehen kann über:
() => {throw 42};
3 Antworten
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.
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.
Sie können nicht return throw
dies ist effektiv, was Sie versuchen zu tun:
function(){
return throw 42;
}