Search code examples
javascriptecmascript-6arrow-functions

Why is `throw` invalid in an ES6 arrow function?


I'm just looking for a reason as to why this is invalid:

() => throw 42;

I know I can get around it via:

() => {throw 42};

Solution

  • If you don't use a block ({}) as body of an arrow function, the body must be an expression:

    ArrowFunction:
        ArrowParameters[no LineTerminator here] => ConciseBody
    
    ConciseBody:
        [lookahead ≠ { ] AssignmentExpression
        { FunctionBody }
    

    But throw is a statement, not an expression.


    In theory

    () => throw x;
    

    is equivalent to

    () => { return throw x; }
    

    which would not be valid either.