自動分號插入規則

分號插入有三個基本規則:

  1. 當從左到右解析程式時,遇到任何語法生成不允許的令牌(稱為違規令牌 ),如果出現以下一個或多個,則在違規令牌之前自動插入分號條件是真的:
  • 違規令牌與前一令牌分開至少一個 LineTerminator
  • 違規令牌是 }
  1. 當從左到右解析程式時,會遇到令牌輸入流的末尾,並且解析器無法將輸入令牌流解析為單個完整的 ECMAScript Program,然後在結尾處自動插入分號輸入流。
  2. 當從左到右解析程式時,會遇到某些語法生成所允許的令牌,但是生產是限制生產,並且令牌將是緊跟註釋後的終端或非終端的第一個令牌“ [no LineTerminator here] ”在限制生產中(因此這樣的標記稱為限制標記),並且受限標記與前一標記分開至少一個 LineTerminator,然後在限制標記之前自動插入分號。

但是,前面的規則還有一個額外的重要條件:如果分號將被解析為空語句,或者如果該分號將成為 for 語句標題中的兩個分號之一,則永遠不會自動插入分號(請參閱 12.6.3)。

來源: ECMA-262,第五版 ECMAScript 規範: