最佳答案
有一个 JSLint选项,实际上是“好的部分”中的一个,“[需要]围绕即时调用的括号”意味着构造
(function () {
// ...
})();
would instead need to be written as
(function () {
// ...
}());
我的问题是,有人能解释一下为什么第二种形式会被认为更好吗?它更有弹性吗?不那么容易出错?它比第一种形式有什么优势?
自从提出这个问题以来,我开始理解在函数值和函数值之间有一个清晰的视觉区别的重要性。考虑这样一种情况,即立即调用的结果是赋值表达式的右边:
var someVar = (function () {
// ...
}());
尽管最外面的圆括号在语法上是不必要的,但是开始的圆括号提供了一个预先的指示,即被赋值的值是函数本身的 没有,而不是被调用的函数的结果。
This is similar to Crockford's advice regarding capitalization of constructor functions -- it is meant to serve as a visual cue to anyone looking at the source code.