JavaScript中的分號插入機制詳細介紹

來源:互聯網
上載者:User

JavaScript中的分號插入機制詳細介紹

 這篇文章主要介紹了JavaScript中的分號插入機制詳細介紹,本文講解JavaScript中各種情況下的分號插入機制,需要的朋友可以參考下

 

 

僅在}之前、一個或多個換行之後和程式輸入的結尾被插入

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

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

代碼如下:


function square(x) {
var n = +x
return n * n
}


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

代碼如下:


function area(r) { r = +r return Math.PI*r*r }//error

 

僅在隨後的輸入標記不能解析時插入

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

複製代碼 代碼如下:


a = b
(f())
//能正確的解析為一條單獨的語句 單價於下面這條語句
a = b(f())

 

a = b
f()
//被解析為兩條獨立的語句
a = bf();//解析有誤

 

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

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

舉例說明一下哦

代碼如下:


a = b
['r', 'g', 'b'].forEach(function (key) {
console.log(key);
});


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

代碼如下:


a = b['r', 'g', 'b'].forEach(function (key) {
console.log(key);
});


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

 

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

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

代碼如下:


a = b
var x//特意在此加了聲明語句以保證a = b不會和(f())解析到一塊兒
(f())


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

 

省略分號導致指令碼串連問題

 

代碼如下:


//file1.js
(function () {
//......
})()

 

//file2.js
(function () {
//......
})()

 

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

 

代碼如下:


(function () {
//......
})()(function () {
//......
})()

 

所以省略分號不僅需要當心當前檔案的下一個標記,而且還需要當心指令碼串連後可能出現在語句之後的任一標記。

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

JavaScript文法限制產生式

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

舉例說明:

代碼如下:


return
{};


上述代碼就被解析成了

代碼如下:


return;
{}
;

 

自增自減運算的分號插入規則

代碼如下:


a
++
b


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

代碼如下:


a;
++b;

 

分號不會作為分隔字元在for迴圈空語句的頭部被自動插入

代碼如下:


for (var i = 0,total=1
i < length
i++) {
total*=i;
}


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

 

空迴圈體的while同樣也需要顯示的分號,否則也會導致解析錯誤

代碼如下:


function mytest() {
while (true)
}


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

代碼如下:


function mytest() {
while (true) ;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.