(function($) {
var foo = (function(){
//some functions
})();
// I can access foo here
var f = new foo();
})(jQuery);
// But obviously not here since it's in another scope
如何将foo
返回到窗口范围,以便可以在外部IIFE之外访问它?我已经尝试了return foo;
,但它没有用。
答案 0 :(得分:3)
只需将其设置为窗口属性:
(function($) {
var foo = (function() {
// some functions
})();
window.foo = foo;
// ^^^^^^^^^^^^^^^^^
})(jQuery);
foo();
但是,通常会将全局对象设置为window
对象的属性。也许您可以通过管理自己的自定义“全局”对象来模拟此功能。例如:
var global = {};
(function($) {
global.foo = (function() {
// define
})();
})(jQuery);
global.foo();
这样,在处理各种范围和对象时,您就不会发生名称冲突。
答案 1 :(得分:1)
使用全局属性是意大利面条代码的快速入场券。您的整个应用程序应尽可能少地存在于全局对象中,最好只有一个元素。
从长远来看,这更加优雅和安全。
var MYAPP = {}; //declaring with var is not necessary here, but it's good to keep constant.
MYAPP = (function($, MYAPP) {
var foo = (function(){
//some functions
})();
// enrich your object
MYAPP.foo = foo;
return MYAPP;
})(jQuery, MYAPP);
然后您可以使用“丰富的”MYAPP对象。
MAYPP.foo();
JavaScript的上帝:道格拉斯·克罗克福德提出了与此类似的模式。