僅在}之前、一個或多個換行之後和程式輸入的結尾被插入
也就是說你只能在一行、一個程式碼區塊和一段程式結束的地方省略分號。
也就是說你可以寫如下程式碼
僅在隨後的輸入標記不能解析時插入
也就是說分號插入是一種錯誤校正機制。看代碼說話
a = b
f()
//被解析為兩個獨立的語句
a = bf();//解析有誤
所以你必須得注意下一語句的開始,從而確定你是否能夠合法的省略分號。
(、[、 、-、和/ 這五個字元開始的語句,那麼最好前面不要省略分號。
舉例說明一下哦
所以(、[、 、-、和/ 這五個字元開始的語句,那麼最好前面不要省略分號。
想省略分號,有經驗的程式設計師會在該語句的後面跟著一個宣告語句,以確保解析器解析正確。如下圖
省略分號導致腳本連線問題
//file2.js
(function () {
//......
})()
上述兩個檔案連接時,就會被解析成如下
所以省略分號不僅需要當心目前文件的下一個標記,而且還需要當心腳本連接後可能出現在語句之後的任一標記。
為避免解析器解析錯誤,你可以在每個檔案前綴一個額外的分號以保護腳本免受粗心連接的影響。如果檔案最開始的語句以上述5個脆弱字元開關,你就應該加上額外的分號前綴。
JavaScript語法限制產生式
JavaScript語法限制產生式:不允許在兩個字元之間出現換行。
舉例說明:
自增自減運算的分號插入規則
分號不會作為分隔符號在for迴圈空語句的頭部自動插入
空循環體的while同樣也需要顯示的分號,否則也會導致解析錯誤
總結一下哦
1.僅在}標記之前、一行的結束和程式的結束處推導分號
2.僅在緊接著的標記不能被解析的時候推導分號
3.在以(、[、 、-、和/ 字元開頭的語句前絕不能省略分號
4.腳本連接的時候,腳本之間明確的插入分號
5.在return、throw、break、continue、 或--的參數之前絕對不能換行
6.分號不能作為for迴圈的頭部或空語句的分隔符號而被推導出