从另一个函数返回自执行函数(IIFE)

时间:2013-03-28 21:04:39

标签: javascript

(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;,但它没有用。

2 个答案:

答案 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的上帝:道格拉斯·克罗克福德提出了与此类似的模式。