JavaScript 分號使用總結


沒有應該不應該,只有你自己喜歡不喜歡。JavaScript 語法長得 C-like 不代表它本質上和 C 是一類語言,所有直覺性的 “當然應該加分號” 都是保守的、未經深入思考的草率結論。后來新設計的語言里可選分號的多得去了,光是 “可以加分號但是大家都不加” 的語言就有:Go, Scala, Ruby, Python, Swift, Groovy...
至於說 “很難總結什么時候加不加”,其實真的很簡單。真正會導致上下行解析出問題的 token 有 5 個:括號(),方括號[],正則開頭的斜杠/,加號+,減號-。我還從沒見過實際代碼中用正則、加號、減號作為行首的情況,所以總結下來就是一句話:一行開頭是括號或者方括號的時候加上分號就可以了,其他時候全部不需要。其實即使是這兩種情況,在實際代碼中也頗為少見。
另外,restricted production 這個東西(也就是導致 return 后面換行會自動插入分號的機制),不管你加不加分號你都是得搞懂了才能不被坑的,和加不加分號沒有什么關系。
更多細節,可以看我曾經給過的一個 talk:Hacking Semicolons by Evan You
最后,上點代碼好了,Vue.js 的代碼全部不帶分號:yyx990803/vue · GitHub
另外說到工具,我確實寫了一個,全自動幫你批量添加或者刪除分號:yyx990803/semi · GitHub 做成 Git pre-commit hook,選擇你自己喜歡的風格就可以。

總結:

1. 自己書寫代碼的時候: 一條完整的語句加分號, 函數聲明不加分號

復制代碼

// 1.  加分號的語句
var jason = "zeng";
var eason = function () {
      // 其他語句...
};
(function($) {
      // 其他語句 ...
})(jQuery);
++a;
b++;

// 2. 不加分號的聲明
function myfunction() {
      // 其他語句 ...
}

復制代碼

2. 結合別人代碼的時候: 發現他人有不加分號的特點的時候, 自己在在語句前面加分號

;(function($) {
     // 其他語句 ...
})(jQuery);

;++a;

3. return 不能單獨占一行

復制代碼

var g1 = function () {
     return "test";  
}

var g2 = function () {
     return {
        a: 1,
        b: 2
    }  
}

var g3 = function () {
     return [
         "one",
         "two"
     ];
}        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM