【问题标题】:Why is `throw` invalid in an ES6 arrow function?为什么 ES6 箭头函数中的 `throw` 无效?
【发布时间】:2015-11-13 14:21:40
【问题描述】:

我只是在寻找为什么这是无效的原因:

() => throw 42;

我知道我可以通过以下方式解决它:

() => {throw 42};

【问题讨论】:

    标签: javascript ecmascript-6 arrow-functions


    【解决方案1】:

    如果您不使用块 ({}) 作为 arrow function 的主体,则主体必须是 expression

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

    throwstatement,而不是表达式。


    理论上

    () => throw x;
    

    等价于

    () => { return throw x; }
    

    这也是无效的。

    【讨论】:

      【解决方案2】:

      你不能return throw 这实际上是你想要做的:

      function(){
        return throw 42;
      }
      

      【讨论】:

        【解决方案3】:

        如果在箭头函数中省略大括号,则会创建an implicit return,这相当于使用大括号创建显式返回,如下所示:() => { return throw 42 };

        但是,您只能返回expressions,而不能返回statements。而throw 是一个声明。

        【讨论】:

          猜你喜欢
          • 2022-11-27
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          相关资源
          最近更新 更多