为什么文件准备好后我的对象无法使用?

abs*_*ntx 0 jquery

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

这有效:

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

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

    }

}(jQuery));

$(document).ready( function() {
    $('p').test('This works!');
});
Run Code Online (Sandbox Code Playgroud)

不起作用:

(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);
Run Code Online (Sandbox Code Playgroud)

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

sah*_*wah 5

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

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

$(document).ready(neato.start);
Run Code Online (Sandbox Code Playgroud)