Avr*_*dis 4 javascript ecmascript-6
我想问一下有人知道原因
const fun = msg => throw new Error( msg ); JS是无效的
const fun = msg => { throw new Error( msg ); } 已验证
以来
const fun = msg => new Error( t ); 已验证
有人(我会)也希望这个案例throw是有效的JS.
这个选择背后有什么理由吗?例如它是否使翻译或其他事情变得困难?
箭头函数定义如下:
ArrowFunction[In, Yield] :
ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In]
ConciseBody[In] :
[lookahead ? { ] AssignmentExpression[?In]
{ FunctionBody }
Run Code Online (Sandbox Code Playgroud)
而throw是一个声明:
ThrowStatement[Yield] :
throw [no LineTerminator here] Expression[In, ?Yield] ;
Run Code Online (Sandbox Code Playgroud)
然后第一个ConciseBody主体语法将不起作用,因为AssignmentExpression不包含语句:
AssignmentExpression :
YieldExpression
ArrowFunction
LeftHandSideExpression = AssignmentExpression
LeftHandSideExpression AssignmentOperator AssignmentExpression
BitwiseANDExpression : BitwiseANDExpression & EqualityExpression
BitwiseXORExpression : BitwiseXORExpression ^ BitwiseANDExpression
BitwiseORExpression : BitwiseORExpression | BitwiseXORExpression
Run Code Online (Sandbox Code Playgroud)
如果你使用大括号,那么ConciseBody的内部部分将是一个FunctionBody,它是一个语句列表.所以允许ThrowStatement.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |