有一个JSLint选项,实际上是The Good Parts之一,它“ [需要]减少立即调用的次数”,这意味着构造
(function () {
// ...
})();
而是需要写成
(function () {
// ...
}());
我的问题是-谁能解释为什么第二种形式可能会更好?它更具弹性吗?容易出错?与第一种形式相比,它有什么优势?
自问了这个问题之后,我开始理解在功能值和功能值之间形成清晰的视觉区别的重要性。考虑一下立即调用的结果在赋值表达式的右侧的情况:
var someVar = (function () {
// ...
}());
尽管从语法上讲,最外面的括号是不必要的,但是括号开头预先表明了所分配的值不是函数本身,而是函数被调用的结果。
这类似于Crockford关于构造函数的大写的建议-旨在作为查看源代码的任何人的视觉提示。
感谢您指出了这一点。我从来没有找到一种方法来摆脱JSLint的警告消息“在循环中创建函数时要小心”。我很小心,并确实将函数放在了结尾处,但JSLint仍然抱怨。现在我知道它假设我使用了第二种模式。
—
viam0Zah
我一直都在“做错”这件事。而且,当我说“所有时间”时,我从1995
—
Dave Land