可能是受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)
})