我被告知在 JavaScript 代码的开头始终插入分号是一个很好的做法,如下所示:
;(function(){
})();
然而,许多流行的 JavaScript 库/框架并不使用这个,例如 jQuery、Backbone 等。
我相信开头的分号应该防止坏代码破坏缩小/压缩的代码等。但是,为什么没有人再使用它了?
开头的分号是否由于某种原因变得无用?
我被告知在 JavaScript 代码的开头始终插入分号是一个很好的做法,如下所示:
;(function(){
})();
然而,许多流行的 JavaScript 库/框架并不使用这个,例如 jQuery、Backbone 等。
我相信开头的分号应该防止坏代码破坏缩小/压缩的代码等。但是,为什么没有人再使用它了?
开头的分号是否由于某种原因变得无用?
更常见的做法是在文件末尾添加分号。问题是,当您像这样连接两个文件时:
// file1.js
(function() {
})()
// file2.js
(function() {
})()
如果不在末尾添加分号file1
,它将尝试使用函数 in 调用函数 in 的返回file1
值file2
。在每个文件的末尾放置一个分号将解决这个问题(就像将它们放在开头一样)。
另一种方法是将函数调用变成这样的语句:
!function() {
}();
我认为这也是 JSLint 推荐的,因为在这种情况下,您不必担心分号(尽管无论如何您都应该使用它们,但那是完全不同的讨论;)。
理想情况下,缩小和合并多个文件应该不会影响您的编码风格。您应该能够根据需要编写程序,然后使用自动化工具正确合并和缩小您的项目。
有很多自动化工具可以做到这一点。以UglifyJS 2为例。如果您环顾四周,我相信您将能够找到更多这样的工具。
回到这个问题,正如 Daff 所指出的,在立即调用的函数表达式之后插入分号很重要。但是,没有理由在它前面加上分号。如果你是一个好孩子,并且在每个语句和表达式之后加上一个分号,那么你就不应该有任何问题。
不要让 JavaScript 为您自动插入分号。
唯一可以不放分号的地方是在函数声明之后:
function foo() {} // it's alright to not put a semicolon here
但是,如果您使用的是函数表达式,那么请始终使用分号。
(function foo() {})(); // you should put a semicolon here
将分号放在其他任何地方只会令人困惑。尤其是在一行的开头。其他编程背景的人也可能认为这是行尾注释的开始。