我没有找到帖子要求与此类似的模式,如果我错过了,请见谅。
无论如何,我在许多 jQuery 插件或脚本中反复看到这种模式:
(function () {
...........
}());
它的目的是什么?它有名字吗?
谢谢!
我没有找到帖子要求与此类似的模式,如果我错过了,请见谅。
无论如何,我在许多 jQuery 插件或脚本中反复看到这种模式:
(function () {
...........
}());
它的目的是什么?它有名字吗?
谢谢!
它也称为立即调用函数表达式
Ben Alman 有一篇很好的文章介绍了 IIFE 的使用,以及为什么“自执行匿名函数”不是最好的术语:
Immediately-Invoked Function Expressions 最有利的副作用之一是,因为这个未命名或匿名的函数表达式被立即调用,而不使用标识符,所以可以在不污染当前范围的情况下使用闭包。
[... T]术语“自执行”有点误导,因为它不是在执行自身的函数,即使该函数正在执行。此外,“匿名”是不必要的特定,因为立即调用的函数表达式可以是匿名的或命名的。至于我更喜欢“调用”而不是“执行”,这是一个简单的头韵问题。我认为“IIFE”看起来和听起来都比“IEFE”更好。</p>
它是一个立即调用的函数表达式。
它对于创建内容享受的范围很有用。它类似于:
function myFunc() {
//code
}
myFunc();
但是有2个不同:
上面的代码是函数声明,不同于函数表达式。除非您将其用作表达式,否则上面的“myFunc”将存储为变量,如下所示:
foo(function myFunc() {
//code
});
然后它不会被存储为变量。
这是一个立即调用的函数表达式(Fiddle):
(function () {
alert("pee");
}());
这是一个立即调用的函数——一旦你声明它,它就会被调用。
Javascript 中的语法意味着“使用和()
之间的任何参数调用此函数。由于您的示例中括号之间没有任何内容,因此没有为函数调用提供任何参数;但是如果您需要提供参数,您可以做一些事情像这样:(
)
(function foo(arg1, arg2) {
alert(arg1 + " " + arg2);
})(3, 5);
它将立即调用foo()
并传入3
和5
作为两个参数。