【轉】javascript 分號問題

來源:互聯網
上載者:User

標籤:blog   http   java   io   strong   for   ar   問題   

javascript分號代表語句的結束符,但由於javascript具有分號自動插入規則,所以它是一個十分容易讓人模糊的東西,在一般情況下,一個換行就會產生一個分號,但實際情況卻不然,也就是說在javascript中換行可能產生分號,也可能不產生,是否自動插入分號,主要看上下行。所以即使是經驗豐富的程式員,有時候也會頭大。

在 ECMAScript 中對分號自動插入規則也有相應的解釋:空語句,變數語句,運算式語句,do-while 語句,continue 語句,break 語句,return 語句,以及 throw 語句,這些確定的ECMAScript語句必須以分號結束。這些分號可以總是明確地出現在原始碼文本中。為方便起見,在特定的情況下,原始碼文本中的這些分號可以被省略。也就是說這些語句的結尾是不需要硬性的輸入分號結尾,javascript會自動插入語句結束處。

想瞭解詳細的ECMAScript分號自動插入規則可以查看以下連結:

  • 原文
  • 中文翻譯

實踐出真理,看一下下面這些例子,就明白,分號自動插入不是那麼好讓人捉摸的。稍微不注意就會讓你頭大。

return引起的血案

function test(){
   var a = 1;
   var b = 2;
   return //會自動插入分號
       (
         a+b
       )
};
alert(test());

一個返回a+b值的函數,初看沒任何問題,但運行alert的結果卻是undefined。根據分號的自動插入規則,return 語句後面如果有換行就會自動插入分號,沒有傳回值也就比較好理解了。如果需要換行的話,可以這樣:

function test(){
   var a = 1;
   var b = 2;
   return ( 
           a+b
          )
};
alert(test());

兩個閉包引起的血案

(function (){
  var a;
})() //不會自動插入分號
(function (){
  var b;
})()

很詭異,解釋不了,誰能告訴我~

for語句頭中的兩個分號,不自動插入分號

for( var a=1,b=10 //不會自動插入分號
         a<b //不會自動插入分號
         a++ 
   )
{}

ECMAScript對以上也有解釋:將分號解釋為空白語句和在for語句中的()中不自動插入分號是特例,是不屬於自動插入規則管轄的。

javascript雖然是弱類型語言,ECMAScript的分號自動插入規則也讓人難以理解透徹。但養成良好的代碼書寫習慣,手動插入分號,養成習慣,就能避免這些問題,同時會在程式調試,代碼的閱讀上對自己對他人都有不小的協助。

同時ECMAScript還給程式員一些忠告:

    • ++ 或 — 應和其運算元出現在同一行。
    • return 或 throw 語句中的運算式應和return 或 throw 出現在同一行。
    • break 或 continue 語句中的標籤應和break 或 continue 出現在同一行。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.