这种模式的名称/目的是什么?

时间:2013-10-04 13:35:01

标签: javascript jquery

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

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:5)

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

Ben Alman有a good article covering IIFE usage,以及为什么"自动执行匿名功能"不是最好的术语:

  

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

     

[... T]“自我执行”一词有点误导,因为它是   即使函数是,也不是正在执行的函数   被执行。此外,“匿名”是不必要的具体,因为   立即调用函数表达式可以是匿名的,也可以是   命名。至于我更喜欢​​“被调用”而不是“被执行”,这是一个   简单的头韵问题;我认为“IIFE”看起来和听起来更好   比“IEFE。”

答案 1 :(得分:3)

这是立即调用的函数表达式 它对于创建其内容的范围是有用的。 它与此类似:

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

但有2个不同之处:

  • 此功能在此处命名
  • 上面的代码是一个函数声明,与函数表达式不同。上面的'myFunc'被存储为变量,除非你将它用作表达式,如下所示:

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

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

答案 2 :(得分:3)

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

(function () {
  alert("pee");
}());

答案 3 :(得分:1)

这是一个立即调用的函数 - 只要你声明它,它就会被唤起。

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

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

会立即致电foo()并传入35作为两个参数。