IIFE jquery已准备就绪

IIFE jquery ready

本文关键字:准备就绪 jquery IIFE      更新时间:2023-09-26

我正在处理一个包含大量javascript的web项目,我们开始遇到命名空间冲突,因为我们正在将所有内容添加到"$."。

我读到了关于命名的文章,在http://addyosmani.com/blog/essential-js-namespacing/

我试着按照建议在IIFE内部设置命名空间,并认为我很幸运,因为该函数已经设置为

(function() { ... }); 

所以我把它转换成:

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

结果(经过数小时的工作)发现原来是

$(function() { ... }

这意味着所有这些都是在jQuery的ready()函数中调用的。

我想保留命名空间IIFE,但不知道如何在jQuery的ready()函数中使用它。这可能吗?如果可能,怎么做?

var namespace = (function() {
    // local variables and functions
    function readyHandler($) {
         // DOM ready code
         $("selector").method();
    }
    // exposed methods
    return {
        readyHandler: readyHandler
    };
})();
jQuery(namespace.readyHandler);

Mmm,不确定您是否理解了这些概念。。。这些函数中没有一个看起来像立即调用函数表达式,因为您没有调用该函数。

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

jQuery的ready已经创建了一个新的闭包,所以您不需要IIFE。

在任何情况下,当使用jQuery时,你都可以在$命名空间中为你的插件命名一个对象,这样你就不会污染它

$.myplugin = {
  ...
}