有一个JSLint选项,事实上是“好部分”之一,它“要求在立即调用周围使用括号”,这意味着该结构:
(function () {
// ...
})();
需要写成以下形式:
(function () {
// ...
}());
我的问题是 - 有人能解释一下为什么第二种形式被认为更好吗?它更有弹性吗?更少出错?它比第一种形式有什么优势?
自从我提出这个问题后,我已经明白了在函数值和函数的值之间具有清晰的视觉区别的重要性。考虑立即调用结果是赋值表达式右侧的情况:
var someVar = (function () {
// ...
}());
虽然最外层的括号在语法上并不必要,但是左括号表明被赋值的值 不是 函数本身,而是函数被调用后的结果。
这类似于Crockford关于构造函数首字母大写的建议 - 它旨在为查看源代码的任何人提供视觉提示。