我试图理解以下两组代码之间的区别。当我使用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);
在这种情况下,有没有办法让我的对象在自封闭函数之外可用?
答案 0 :(得分:5)
将代码放在IIFE中的全部目的是确保外部代码无法访问其中的变量。如果要访问它,则必须将其附加到在该函数作用域之外声明的变量,因此在您的示例中,全局$
对象。或者,您可以将其附加到窗口:
(function ($) { ...
....
window.neato = neato;
})(jQuery);
$(document).ready(neato.start);