關於 JavaScript 語句後是否應該加分號

可能是受c++,c#風格影響比較深,一半出於強迫症,之前一直是個分號黨。

最近看各種大神和教程的代碼都並不寫分號。調研了一下,從此擁抱前置分號。

==================================================================

以下摘自 @賀師俊 在某乎的回答:

總結下“分號黨”推崇的“總是寫分號”風格的最主要缺陷:
1. 人總是有可能忘記寫分號。ASI(分號自動插入機制)導致無法區分是無意中忘記還是有意不寫(代碼折行)。
2. “總是寫分號”並不能完全解決ASI缺陷(如return後換行會自動插入分號)。

3. “}”後是否要加分號需要回溯到對應“{”之前進行語義判斷(是否是函數表達式),成本遠高於前置分號判斷(只要對行首字符進行token判斷:是否是 [ ( + - / 五個符號之一)。

如:
a = b
(function(){
    ...
})()
會被解釋爲 a = b(function(){...})()

其實如果我們真想表達上述代碼,通常會這樣寫:

a = b(function(){ 

    ... 

})()

再如:

a = b

[1,2,3].forEach(function(e){  

    console.log(e)

})

實際效果等價於

a = b[3].forEach(function(e){

    console.log(e) 

})

坑爹的是,搞不好這代碼說不定還能運行!你要事後通過調試發現這些錯誤是相當滴痛苦啊。

不過這些問題的解決方案其實也很簡單。只要在 [ 、 ( 、 + 、 -、/  之前加分號就可以了:

a = b 

;(function(){ 

... 

})() 

a = b 

;[1,2,3].forEach(function(e){

    console.log(e) 

})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章