自动分号插入规则

分号插入有三个基本规则:

  1. 当从左到右解析程序时,遇到任何语法生成不允许的令牌(称为违规令牌 ),如果出现以下一个或多个,则在违规令牌之前自动插入分号条件是真的:
  • 违规令牌与前一令牌分开至少一个 LineTerminator
  • 违规令牌是 }
  1. 当从左到右解析程序时,会遇到令牌输入流的末尾,并且解析器无法将输入令牌流解析为单个完整的 ECMAScript Program,然后在结尾处自动插入分号输入流。
  2. 当从左到右解析程序时,会遇到某些语法生成所允许的令牌,但是生产是限制生产,并且令牌将是紧跟注释后的终端或非终端的第一个令牌“ [no LineTerminator here] ”在限制生产中(因此这样的标记称为限制标记),并且受限标记与前一标记分开至少一个 LineTerminator,然后在限制标记之前自动插入分号。

但是,前面的规则还有一个额外的重要条件:如果分号将被解析为空语句,或者如果该分号将成为 for 语句标题中的两个分号之一,则永远不会自动插入分号(请参阅 12.6.3)。

来源: ECMA-262,第五版 ECMAScript 规范: