即时函数调用语法
2022-08-30 05:36:37
有一个JSLint选项,实际上是The Good Parts之一,“[需要]围绕即时调用进行parens”,这意味着构造
(function () {
// ...
})();
相反,需要写成
(function () {
// ...
}());
我的问题是 - 谁能解释为什么第二种形式可能被认为更好?它更有弹性吗?不易出错?与第一种形式相比,它有什么优势?
自从提出这个问题以来,我开始理解在函数值和函数值之间有清晰的视觉区别的重要性。考虑以下情况:立即调用的结果是赋值表达式的右侧:
var someVar = (function () {
// ...
}());
尽管最外层的括号在语法上是不必要的,但左括号给出了一个前期指示,表明所分配的值不是函数本身,而是被调用函数的结果。
这类似于Crockford关于构造函数大写的建议 - 它旨在为任何查看源代码的人提供视觉提示。