7

我没有找到帖子要求与此类似的模式,如果我错过了,请见谅。

无论如何,我在许多 jQuery 插件或脚本中反复看到这种模式:

(function () {
  ...........
}());

它的目的是什么?它有名字吗?

谢谢!

4

4 回答 4

5

它也称为立即调用函数表达式

Ben Alman 有一篇很好的文章介绍了 IIFE 的使用,以及为什么“自执行匿名函数”不是最好的术语:

Immediately-Invoked Function Expressions 最有利的副作用之一是,因为这个未命名或匿名的函数表达式被立即调用,而不使用标识符,所以可以在不污染当前范围的情况下使用闭包。

[... T]术语“自执行”有点误导,因为它不是在执行自身的函数,即使该函数正在执行。此外,“匿名”是不必要的特定,因为立即调用的函数表达式可以是匿名的或命名的。至于我更喜欢​​“调用”而不是“执行”,这是一个简单的头韵问题。我认为“IIFE”看起来和听起来都比“IEFE”更好。</p>

于 2013-10-04T13:38:57.363 回答
3

它是一个立即调用的函数表达式
它对于创建内容享受的范围很有用。它类似于:

function myFunc() {
    //code
}
myFunc();

但是有2个不同:

  • 函数在这里命名
  • 上面的代码是函数声明,不同于函数表达式。除非您将其用作表达式,否则上面的“myFunc”将存储为变量,如下所示:

    foo(function myFunc() {
        //code
    });
    

然后它不会被存储为变量。

于 2013-10-04T13:36:17.507 回答
3

这是一个立即调用的函数表达式(Fiddle):

(function () {
  alert("pee");
}());
于 2013-10-04T13:37:11.450 回答
1

这是一个立即调用的函数——一旦你声明它,它就会被调用。

Javascript 中的语法意味着“使用和()之间的任何参数调用此函数。由于您的示例中括号之间没有任何内容,因此没有为函数调用提供任何参数;但是如果您需要提供参数,您可以做一些事情像这样:()

(function foo(arg1, arg2) {
   alert(arg1 + " " + arg2);
})(3, 5);

它将立即调用foo()并传入35作为两个参数。

于 2013-10-04T13:40:19.543 回答