JS自動插入分號規則

2021-08-24 20:18:36 字數 1877 閱讀 6183

首先應該知道哪些語句會用到自動插入分號(automatic semisolon insertion, asi):

- 空語句

-var語句

- 表示式

-do-while語句

-continue語句

-break語句

-return語句

-throw語句

asi的具體規則,在此規範中描述:§11.9.1 rules of automatic semicolon insertion

描述了三個示例:

1.如果遇到語法不允許的token(行終結符}),將在它前面插入乙個分號:

- token被至少乙個行終結符與前面的token分開

- 這個token是}

例如:

3

被轉換成:

3;

數值 1遇到第一種情況,其隨後的token是乙個行終結符。2遇到第二種情況,其隨後的token是}.

2.當遇到token的輸入流的末尾並且解析器不能將輸入的token流解析成乙個單獨完整的程式,然後乙個分號就會被自動插入到輸入流的末尾。

例如:

a =b

++c

被轉換成:

a =b;

++c;

3.這種情況是發生在,當語法的某些產生式使得token合法時,且產生式是有條件限制的產生式,在被限制的token之前會自動插入分號。

有條件限制的產生式:

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

return語句的乙個典型的例子,

return

"something";

被轉換成:

return;

"something";

Go語言小細節 分號自動插入規則

為了允許一條複雜語句完全顯示在乙個 行中,分號可能被插入在乙個右小括號 或者右大括號 之前 package main funcf bool func main 以上 列印出的結果為 true 原因就是,go 語言的分號自動插入規則導致的,當我們將分號補齊後,再看看 結構 package main f...

JS分號自動插入的ASI機制

規範理論 es5 標準定義了自動分號插入規則,包括以下三個基本規則加兩個前置條件 前置條件 1 如果插入分號後解析結果是空語句,那麼不會自動插入分號。例子 空語句,else 前不加分好 if a b else c d 2 如果插入分號後它成為 for 語句頭部的兩個分號之一,那麼不會自動插入分號。例...

JS傳遞陣列自動以分號分隔

今天在家做公司的專案,遇到乙個很奇怪的事,其中js傳遞陣列時,傳遞過去的資料會以,分號 分隔。如下 function expertopinion var url servlet makescoreaction var paras iditem iditem idoperate idoperate o...