【问题标题】:standalone parentheses in javascript [duplicate]javascript中的独立括号[重复]
【发布时间】:2011-09-18 04:04:43
【问题描述】:

可能的重复:
JavaScript: Why the anonymous function wrapper?
A Javascript function
How does the (function() {})() construct work and why do people use it?

我在 javascript 中看到了以下格式的一些代码:

(
 function()
 {
   //stmt
 }
)();

为什么我们要使用这些独立的括号?谢谢。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这是 Javascript 中所谓的模块模式的基础。有关详细信息,请参阅这些文章:

    http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

    http://yuiblog.com/blog/2007/06/12/module-pattern/

    基本上,正如文章所述,这种模式非常适合维护隐私和状态,但也允许松散耦合和链接您的 Javascript 模块。

    【讨论】:

    • OP中的例子不是模块模式,它是一个简单的匿名函数表达式,立即执行。如果它实际上创建了一个具有可在匿名函数之外访问的方法的对象,它只会是模块模式 - 通常通过返回所述对象来完成,尽管还有其他方法。但是还有其他非模块原因,您可能会将一些代码包装在匿名立即执行的函数中,例如,为特定计算创建一些临时工作变量而不污染全局命名空间。
    • 我仍然喜欢这些资源。他们很好。
    • @nnnnnn:同意,这不是一种模式,而是一种模式的基础。我已经相应地编辑了我的帖子。投赞成票。
    【解决方案2】:

    创建匿名函数并调用它,因此避免了只调用一次的函数的命名空间和内存污染。

    虽然类似于:

    var f = function () { ... };
    f();
    

    这个变体避免了创建一个变量f,这样可以节省内存并避免命名空间冲突。

    【讨论】:

      【解决方案3】:

      ; 之前的最后两个括号直接执行匿名函数。其他两个括号是可选的,只是某种约定。

      这种模式通常用于不污染全局命名空间:

      (function() {
        var a = 42;
      })();
      
      alert(a); // a is undefined
      

      Paul Irish 有一个关于这个和其他 javascript 模式的很好的截屏视频:http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/

      【讨论】:

        【解决方案4】:

        独立括号()表示执行函数,在这段代码中,它是一个匿名函数。

        【讨论】:

          【解决方案5】:

          此代码创建一个函数表达式,然后立即调用它。

          和这个一样

          var unnamed = function() { ... };
          
          (unnamed) ();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-03
            • 2018-02-11
            • 1970-01-01
            • 2019-08-15
            • 1970-01-01
            • 2020-03-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多