我该如何申报自我调用功能?

Ric*_*gan 8 javascript anonymous-function

我在Javascript中看到过这样的自调用函数:

(function () {
    // foo!
})();
Run Code Online (Sandbox Code Playgroud)

但我也看到他们这样写:

(function () {
    // bar!
}());
Run Code Online (Sandbox Code Playgroud)

从语法上讲,它们完全相同.实际上,我的个人习惯是第一种格式,但是我应该注意两者之间有什么区别吗?像浏览器纠结或其他什么?

例如,一个非常微不足道的事情是,如果第二种格式应该可靠地工作,那么这意味着这样的事情也应该是可能的:

function () {
    // shut the front door! saved two characters right there!
}();
Run Code Online (Sandbox Code Playgroud)

尽管如此,这会伤害可读性.

And*_*old 4

第一的:

正如您所假设的,自调用匿名函数的前两个版本之间绝对没有区别。没有浏览器链接、怪癖,只是取决于个人喜好(顺便说一句,道格拉斯·克罗克福德称后一种形式为“狗球”)。

第二:

function() {
}()
Run Code Online (Sandbox Code Playgroud)

按设计不会起作用,因为该语句创建了一个函数语句/声明。您需要一个函数表达式来立即调用自身。要创建函数表达式,您可以执行多种操作。将整个语句放入括号中是一种方法,但您也可以写

!function() {
}()
Run Code Online (Sandbox Code Playgroud)

或者

+function() {
}
Run Code Online (Sandbox Code Playgroud)

所有这些运算符都会生成一个表达式。