【问题标题】:What is this pattern's name / purpose? [duplicate]这种模式的名称/用途是什么? [复制]
【发布时间】:2013-10-04 13:35:01
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 这是一个立即执行的函数
  • I 间接 I 调用 F 功能 E xpression,IIFE。在这里,function 被用作 operator,而不是 statement,然后 () 让它在被解释后立即被调用。
  • 不是自执行函数。您是否看到它在任何地方自行执行?注意:这意味着函数在自身内部调用自身。这个函数只是被匿名调用,而不是单独调用。
  • 我把这个看成忍者手里剑

标签: javascript jquery


【解决方案1】:

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

Ben Alman 有 a good article covering IIFE usage,为什么“自执行匿名函数”不是最好的术语:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 他的例子不是一个自动执行的函数。也不是你的。自执行函数是在自身内部调用自身的函数。你的只在外面被叫。
    • 很高兴您修复了它,但抱歉,我无法取消投票。如果可以的话,我会的。
    • @JoeSimmons 只需再次点击反对票;)
    • 我不能。它是锁着。如果你编辑它,它会被解锁几分钟,我可以投票。
    • 快速编辑。那我可以投票了。
    【解决方案3】:

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

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

    但是有两个不同:

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

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

    那么它就不会被存储为变量。

    【讨论】:

    • 同样的结果——也许吧。但这是一个命名函数,示例是匿名的。只是一个注释。
    • 他的例子不是一个自动执行的函数。也不是你的。自执行函数是在自身内部调用自身的函数。你的只在外面被叫。
    • @JoeSimmons,现在看到你的编辑了。审核队列拒绝了它,但我使用了它。谢谢。
    • 不客气 :) ps:我刚刚重新编辑了一遍。我在那里留下了一个额外的括号,犯了一个小语法错误:p
    • 是的,我可能应该有。但是既然我想说的都在你的帖子里了,那就没必要了,哈哈:p
    【解决方案4】:

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

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

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

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

    【讨论】:

    • 我会说它会被调用,但我猜 evoke 也可以。
    • 废话,它得到了Ewok'd。 ;)
    • 其实我只是looked upinvoke 和evoke 的区别,invoke 是这里的用语。开个玩笑,哈哈。
    猜你喜欢
    • 2011-02-10
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多