有一个JSLint选项,实际上是好的部分之一,“[需要]立即调用周围的括号”,这意味着构造
(function () {
// ...
})();
需要写成
(function () {
// ...
}());
我的问题是——任何人都可以解释为什么第二种形式可能被认为更好吗?是不是更有弹性?不易出错?它与第一种形式相比有什么优势?
<小时/>自从提出这个问题以来,我开始理解在函数值和函数值之间进行清晰的视觉区分的重要性。考虑立即调用的结果是赋值表达式右侧的情况:
var someVar = (function () {
// ...
}());
虽然最外面的括号在语法上是不必要的,但左括号预先表明所分配的值不是函数本身,而是被调用函数的结果。
这类似于 Crockford 关于构造函数大写的建议 - 它旨在为查看源代码的任何人提供视觉提示。
最佳答案
来自道格拉斯·克罗克福德的 style convention guide :(搜索“立即调用”)
当要立即调用函数时,整个调用表达式应括在括号中,以便清楚地表明生成的值是函数的结果而不是函数本身。
所以,基本上,他认为这使得函数值和函数值之间的区别更加清晰。因此,这是一个风格问题,而不是代码本身的实质性差异。
更新了引用,旧的 PPT 不再存在
关于javascript - 立即函数调用语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737947/