为什么我的对象在准备好文档时无法使用?

时间:2016-02-11 22:38:05

标签: jquery

我试图理解以下两组代码之间的区别。当我使用jquery插件定义时,我能够在自封闭函数之外访问插件。但是,如果我尝试简单地设置一些具有相同自封闭功能的对象,则它不起作用。

这有效:

(function($) {
    $.fn.test = function(message) {

        return this.each(function() {
            $(this).text(message);
        });

    }

}(jQuery));

$(document).ready( function() {
    $('p').test('This works!');
});

不起作用:

(function($) {


var neato={
    start:function(){
        $('p').html('We must have an issue of scope or similar, this does not work');
    }
}


}(jQuery));

$(document).ready(neato.start);

在这种情况下,有没有办法让我的对象在自封闭函数之外可用?

1 个答案:

答案 0 :(得分:5)

将代码放在IIFE中的全部目的是确保外部代码无法访问其中的变量。如果要访问它,则必须将其附加到在该函数作用域之外声明的变量,因此在您的示例中,全局$对象。或者,您可以将其附加到窗口:

(function ($) { ...
    ....
    window.neato = neato;
})(jQuery);

$(document).ready(neato.start);