【问题标题】:I want to know about this javascript function pattern [duplicate]我想知道这个javascript函数模式[重复]
【发布时间】:2012-04-03 16:25:24
【问题描述】:

【问题讨论】:

标签: javascript


【解决方案1】:

它只是立即执行括在括号中的代码(第一个块返回一个函数,第二对括号执行它)。

以这两个 sn-ps 为例:

function foo() {
    print 'foo';
}

(function() {
    print 'foo';
})();

在你调用 foo(); 之前,第一个不会做任何事情;而第二个会立即打印 'foo'。

【讨论】:

    【解决方案2】:

    您会立即使用特定参数调用匿名函数。

    一个例子:

    (function(name){   alert(name); })('peter') This alerts "peter".
    

    对于 jQuery,您可以将 jQuery 作为参数传递并在函数中使用 $。所以你仍然可以在 noConflict-mode 下使用 jQuery,但使用方便的 $:

    jQuery.noConflict() (function($){   var obj = $('<div/>', { id: 'someId' }); })(jQuery)
    

    【讨论】:

      【解决方案3】:

      这是一个匿名的自执行函数。它是匿名的,因为它没有被命名,并且是自执行的,所以它运行(没有其他方法可以运行未命名的函数)。

      封装一个谨慎的代码模块特别有用,因为它充当了一个闭包,防止变量泄漏到全局命名空间中。

      【讨论】:

      • 表示页面加载完毕后调用该函数?
      • 不,会立即执行。它看起来类似于在页面加载后执行的 jQuery(或其他工具)中使用的格式。此外,jQuery 插件使用该模式来封装模块。
      【解决方案4】:

      这就是所谓的模块模式。这个想法是有一个封装的模块,它不能与您或其他人创建的任何其他模块冲突。您可以在该模块中创建公共和私有方法。 见:Js Pattern

      【讨论】:

      • 而且,它会立即执行里面的内容,不会在全局变量空间留下任何痕迹(除非它是通过在窗口全局对象中添加对象来填充的)。
      【解决方案5】:

      我不确定(function())() 是什么意思,但我会假设您的意思是(function() { … })()。大致是这样的:

      f = function() { … }; // Define a function.
      f();                  // Call it.
      

      唯一的区别是它不需要变量。

      【讨论】:

        猜你喜欢
        • 2019-06-22
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-11
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2019-12-13
        相关资源
        最近更新 更多