1

这种模式是:

// Global module
var myModule = (function ( jQ, _ ) {

    function privateMethod1(){
        jQ(".container").html("test");
    }

    function privateMethod2(){
      console.log( _.min([10, 5, 100, 2, 1000]) );
    }

    return{
        publicMethod: function(){
            privateMethod1();                
        }            
    };

// Pull in jQuery and Underscore
}( jQuery, _ ));

myModule.publicMethod();  

我不明白传递全局的目的是什么,如果它是全局的?

在原型链中让 jQuery 或其他全局“更接近”不是更有效吗?

如果有人想使用

jQ

那是指jQuery

为什么不做

var jQ = jQuery

在范围内他/她想使用它。

4

1 回答 1

0

这样做的一个原因是,如果您在一个页面上使用 jQuery noconflict有多个版本的 jQuery ,您可以将这段代码与必须知道或担心它隔离开来。你只会通过正确的版本。如果您想使用速记,这也可以很好地防止与也使用该符号$的其他库(例如 Mootools)发生冲突。$

总的来说,虽然我同意你的观点,但它似乎并不是特别有用。

更新

事实上,这似乎是这种特殊用途的原因。从您链接的来源

在这里,我们将插件逻辑包装在一个匿名函数中。为了确保我们使用 $ 符号作为简写不会在 jQuery 和其他 JavaScript 库之间产生冲突,我们只需将它传递给这个闭包,它将它映射到美元符号。

并且

这种模式的变体演示了如何将全局变量(例如 jQuery、Underscore)作为参数传递给我们模块的匿名函数。这有效地允许我们根据需要导入它们并在本地别名它们。

所以它被用作一个人为的例子来表明如果你喜欢一个较短的名字,你可以给全局变量取别名。

于 2013-07-12T18:07:48.690 回答