IIFE jquery准备好了

时间:2012-08-29 00:05:29

标签: javascript jquery javascript-namespaces iife

我正在开发一个包含大量javascript的Web项目,我们开始遇到名称空间冲突,因为我们将所有内容添加到“$。”。

我读到了关于命名空间的信息,并在http://addyosmani.com/blog/essential-js-namespacing/

找到了很棒的文章

我试图按照建议在IIFE中设置命名空间,并认为我很幸运,因为该功能已经设置为

(function() { ... }); 

所以我将其转换为:

(function(namespace, undefined) { ... })(window.stuff = window.stuff || {});

只发现(工作时间后)实际原件是

$(function() { ... }

这意味着它在jQuery的ready()函数中被调用。

我想保留命名空间IIFE,但无法弄清楚如何在jQuery的ready()函数中使用它。这是可能的,如果是这样的话?

2 个答案:

答案 0 :(得分:0)

var namespace = (function() {
    // local variables and functions

    function readyHandler($) {
         // DOM ready code
         $("selector").method();
    }

    // exposed methods
    return {
        readyHandler: readyHandler
    };
})();

jQuery(namespace.readyHandler);

答案 1 :(得分:0)

嗯,不确定你的概念是否直接......这些函数都不像立即调用函数表达式,因为你没有调用函数。

(function() { ... } ());
                  --^-- invoke function 

jQuery的ready已经创建了一个新的闭包,所以你无论如何都不需要IIFE。

在任何情况下,使用jQuery时,您可以使用一个不会污染它的对象在$命名空间中命名插件。

$.myplugin = {
  ...
}