一尘不染

JavaScript 立即函数调用语法

javascript

有一个JSLint选项(实际上是The Good Parts之一),它“需要避免立即调用”,这意味着构造

(function () {

  // ...

})();

而是需要写成

(function () {

  // ...

}());

我的问题是-谁能解释为什么第二种形式可能会更好?它更具弹性吗?容易出错?与第一种形式相比,它有什么优势?


自问了这个问题之后,我开始理解在功能值和功能值之间进行清晰的视觉区分的重要性。考虑一下立即调用的结果在赋值表达式的右侧的情况:

var someVar = (function () {

  // ...

}());

尽管从语法上讲,最外面的括号不是必需的,但是括号开头预先表明了所分配的值不是函数本身,而是函数被调用的结果。

这类似于克罗克福德(Crockford)关于大写构造函数的建议-旨在作为任何查看源代码的人的视觉提示。


阅读 348

收藏
2020-05-01

共1个答案

一尘不染

来自Douglass Crockford的样式约定指南:(搜索“立即调用”)

当要立即调用一个函数时,应将整个调用表达式包装在括号中,以便清楚地知道所产生的值是函数的结果,而不是函数本身。

因此,从根本上说,他认为这使功能值和功能值之间的区别更加清晰。因此,这是一个风格问题,而不是代码本身的实质差异。

更新的参考,旧的PPT不再存在

2020-05-01