好吧,首先我应该问一下这是否与浏览器有关。
我已经读到,如果找到了无效的令牌,但是代码段在该无效令牌之前一直有效,如果在该令牌之前加了换行符,则在该令牌之前插入一个分号。
但是,引用由分号插入引起的错误的常见示例是:
return _a+b;
..似乎不遵循此规则,因为_a是有效令牌。
另一方面,分解呼叫链可以按预期工作:
$('#myButton') .click(function(){alert("Hello!")});
是否有人对规则有更深入的描述?
首先,您应该知道哪些语句受自动分号插入(为简洁起见也称为ASI)的影响:
var
do-while
continue
break
return
throw
有关ASI的具体规则,请参见规范§11.9.1自动分号插入规则
描述了三种情况:
当遇到语法不允许的记号(LineTerminator或})时,如果出现以下情况,将在其前插入分号:
LineTerminator
}
例如 :
{ 1 2 } 3
转化为
{ 1 ;2 ;} 3;
在NumericLiteral 1满足所述第一条件,令牌是行终止如下。 在2满足第二条件,令牌是以下}。
NumericLiteral
1
2
a = b ++c
转换为:
a = b; ++c;
限量生产:
UpdateExpression : LeftHandSideExpression [no LineTerminator here] ++ LeftHandSideExpression [no LineTerminator here] -- ContinueStatement : continue ; continue [no LineTerminator here] LabelIdentifier ; BreakStatement : break ; break [no LineTerminator here] LabelIdentifier ; ReturnStatement : return ; return [no LineTerminator here] Expression ; ThrowStatement : throw [no LineTerminator here] Expression ; ArrowFunction : ArrowParameters [no LineTerminator here] => ConciseBody YieldExpression : yield [no LineTerminator here] * AssignmentExpression yield [no LineTerminator here] AssignmentExpression
经典示例,带有ReturnStatement:
ReturnStatement
return "something";
return; "something";