8

我被告知在 JavaScript 代码的开头始终插入分号是一个很好的做法,如下所示:

;(function(){

})();

然而,许多流行的 JavaScript 库/框架并不使用这个,例如 jQuery、Backbone 等。

我相信开头的分号应该防止坏代码破坏缩小/压缩的代码等。但是,为什么没有人再使用它了?

开头的分号是否由于某种原因变得无用?

4

2 回答 2

8

更常见的做法是在文件末尾添加分号。问题是,当您像这样连接两个文件时:

// file1.js
(function() {
})()

// file2.js
(function() {
})()

如果不在末尾添加分号file1,它将尝试使用函数 in 调用函数 in 的返回file1file2。在每个文件的末尾放置一个分号将解决这个问题(就像将它们放在开头一样)。

另一种方法是将函数调用变成这样的语句:

!function() {
}();

我认为这也是 JSLint 推荐的,因为在这种情况下,您不必担心分号(尽管无论如何您都应该使用它们,但那是完全不同的讨论;)。

于 2013-02-22T14:56:28.247 回答
3

理想情况下,缩小和合并多个文件应该不会影响您的编码风格。您应该能够根据需要编写程序,然后使用自动化工具正确合并和缩小您的项目。

有很多自动化工具可以做到这一点。以UglifyJS 2为例。如果您环顾四周,我相信您将能够找到更多这样的工具。

回到这个问题,正如 Daff 所指出的,在立即调用的函数表达式之后插入分号很重要。但是,没有理由在它前面加上分号。如果你是一个好孩子,并且在每个语句和表达式之后加上一个分号,那么你就不应该有任何问题。

不要让 JavaScript 为您自动插入分号。

唯一可以不放分号的地方是在函数声明之后:

function foo() {} // it's alright to not put a semicolon here

但是,如果您使用的是函数表达式,那么请始终使用分号。

(function foo() {})(); // you should put a semicolon here

将分号放在其他任何地方只会令人困惑。尤其是在一行的开头。其他编程背景的人也可能认为这是行尾注释的开始。

于 2013-02-22T15:21:59.133 回答