天天看點

JavaScript中的分号插入機制

也就是說你隻能在一行、一個代碼塊和一段程式結束的地方省略分号。

也就是說你可以寫如下代碼

但是卻不可以寫的像下面代碼一樣,這樣就報錯了哦

也就是說分号插入是一種錯誤校正機制。看代碼說話

是以你必須得注意下一條語句的開始,進而确定你是否能夠合法的省略分号。

(、[、+、-、和/  這五個字元開始的語句,那麼最好前面不要省略分号。

舉例說明一下哦

本來你以為沒有錯誤,但是解析器卻解析成了如下語句

因為第二句語句是以[開始的,是以解析器不會在第一條語句後自動插入分号,這樣就解析成了如上所示,上面的式子解析時b['b'].forEach難道不是錯的嗎?

是以(、[、+、-、和/  這五個字元開始的語句,那麼最好前面不要省略分号。

想省略分号,有經驗的程式員會在該語句的後面跟一個聲明語句,以保證解析器解析正确。如下所示

是以如果你需要省略分号,必須檢查接下來的一行開始标記是否為上述五個字元導緻解析器會禁用自動插入分号,或者你也可以在(、[、+、-、和/  這五個字元前置一個分号

上述兩個檔案連接配接時,就會被解析成如下

是以省略分号不僅需要當心目前檔案的下一個标記,而且還需要當心腳本連接配接後可能出現在語句之後的任一标記。

為避免解析器解析錯誤,你可以在每個檔案字首一個額外的分号以保護腳本免受粗心連接配接的影響。如果檔案最開始的語句以上述5個脆弱字元開關,你就應該添加額外的分号字首。

JavaScript文法限制産生式:不允許在兩個字元之間出現換行。

舉例說明:

上述代碼就被解析成了

大家想想上述代碼會被解析成什麼樣?說出謎底吧,因為自增運算符既可以作為前置運算符又可以作為後置運算符,但是後置運算符不能出現在換行之前,是以上述代碼被解析成了

像上述的代碼就會出現解析錯誤。

空循環體的while同樣也需要顯示的分号,否則也會導緻解析錯誤

必須寫成如下才不會報錯哦

僅在}标記之前、一行的結束和程式的結束處推導分号

僅在緊接着的标記不能被解析的時候推導分号

在以(、[、+、-、和/ 字元開頭的語句前絕不能省略分号

當腳本連接配接的時候,在腳本之間顯式的插入分号

在return、throw、break、continue、++或--的參數之前絕不能換行

分号不能作為for循環的頭部或空語句的分隔符而被推導出

繼續閱讀