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

后端 未结 3 1520
天涯浪人
天涯浪人 2020-12-01 21:00

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

() => throw 42;

I know I can get around it via:

() =&         


        
相关标签:
3条回答
  • 2020-12-01 21:09

    If you omit the braces in an arrow function, you create an implicit return, which is equivalent to creating an explicit return with the braces, like so: () => { return throw 42 };

    However, you can only return expressions, not statements. And throw is a statement.

    0 讨论(0)
  • 2020-12-01 21:17

    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.

    0 讨论(0)
  • 2020-12-01 21:17

    You can't return throw this is effectively what you're trying to do:

    function(){
      return throw 42;
    }
    
    0 讨论(0)
提交回复
热议问题