javascript - 立即函数调用语法

标签 javascript syntax jslint iife

有一个JSLint选项,实际上是好的部分之一,“[需要]立即调用周围的括号”,这意味着构造

(function () {

  // ...

})();

需要写成

(function () {

  // ...

}());

我的问题是——任何人都可以解释为什么第二种形式可能被认为更好吗?是不是更有弹性?不易出错?它与第一种形式相比有什么优势?

<小时/>

自从提出这个问题以来,我开始理解在函数值和函数值之间进行清晰的视觉区分的重要性。考虑立即调用的结果是赋值表达式右侧的情况:

var someVar = (function () {

  // ...

}());

虽然最外面的括号在语法上是不必要的,但左括号预先表明所分配的值不是函数本身,而是被调用函数的结果。

这类似于 Crockford 关于构造函数大写的建议 - 它旨在为查看源代码的任何人提供视觉提示。

最佳答案

来自道格拉斯·克罗克福德的 style convention guide :(搜索“立即调用”)

当要立即调用函数时,整个调用表达式应括在括号中,以便清楚地表明生成的值是函数的结果而不是函数本身。

所以,基本上,他认为这使得函数值和函数值之间的区别更加清晰。因此,这是一个风格问题,而不是代码本身的实质性差异。

更新了引用,旧的 PPT 不再存在

关于javascript - 立即函数调用语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737947/

相关文章:

javascript - 谷歌应用脚​​本: How do I pull data entered today from one spreadsheet and transpose it to another?

javascript - 尝试使用 JS 动态显示隐藏在样式表中的元素

python - 如何在Python中进行换行(续行)?

javascript - 不必要的转义字符 :\[ no-useless-escape

javascript - JSLint ( JSHint ) 仅限某一行范围

javascript - < 标签有什么用?

javascript - 主干 View 事件未触发

json - 这个描述Json语法用什么语言来解释呢?

sql - VBA 运行时错误 3134

jquery - Jslint缺少分号错误