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