本節書摘來自異步社群《編寫可維護的javascript》一書中的第1章,第1.2節,作者:【美】nicholas c. zakas著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
有一件很有意思且很容易讓人困惑的事情,那就是javascript的語句要麼獨占一行,要麼以分号結尾。類似c的程式設計語言,諸如c++和java,都采用這種行結束寫法,即結尾使用分号。下面這兩段示例代碼都是合法的javascript。
有賴于分析器的自動分号插入(automatic semicolon insertion,asi)機制,javascript代碼省略分号也是可以正常工作的。asi 會自動尋找代碼中應當使用分号但實際沒有分号的位置,并插入分号。大多數場景下asi都會正确插入分号,不會産生錯誤。但asi的分号插入規則非常複雜且很難記住,是以我推薦不要省略分号。看一下這段代碼。
在這段代碼中,函數getdata()的本意是傳回一個包含一些資料的對象。然而,return之後新起了一行,導緻return後被插入了一個分号,這會導緻函數傳回值是undefined。可以通過将左花括号移至與return同一行的位置來修複這個問題。
asi在某些場景下是很管用的,特别是,有時候asi可以幫助減少代碼錯誤。當某個場景我們認為不需要插入分号而asi認為需要插入時,常常會産生錯誤。我發現很多開發人員,尤其是新手們,更傾向于使用分号而不是省略它們。
douglas crockford針對javascript提煉出的程式設計規範(下文統稱為crockford的程式設計規範)推薦總是使用分号,同樣,jquery核心風格指南、google的javascript風格指南以及dojo程式設計風格指南都推薦不要省略分号。如果省略了分号,jslint和jshint預設都會有警告。