Javascript闭包返回undefined

Mic*_*nio 4 javascript closures web

我继承了我需要为我的工作更新的代码库.我正在慢慢地学习他们正在尝试使用现有的闭包来完成什么,但是在尝试更新使用此功能的网站的一部分时我遇到了困难.我将给出代码试图完成的基本概述,看看是否有人可以提供帮助.

var TheObject = (function (){
    var veryLargeDependantData = {
        var1: {}, 
        var2: {}, 
        var3: [],
        //Set these variables via functions
        function1: function f1(data){...}, 
        function2: function f2(data){...}, 
        initialize: function initialize() { //set values for var1... var3}
     };

     return {initialize: veryLargeDependentData.initialize};
})().initialize(); 
Run Code Online (Sandbox Code Playgroud)

由于我显然无法在网站上显示生产代码,因此必须这样做.但基本上,VeryLargeDependentData变量是函数的入口.当页面加载时,它调用初始化函数,一切都很愉快.但是现在我需要将它添加到onclick事件和旧页面,而firebug控制台说该变量是未定义的.在其他页面中,我可以毫无问题地使用它.

我的问题是,正在发生什么导致闭包不能成为像这样的可调用命名空间的一部分.我有点像javascript nOOb,所以如果问题听起来有误,我会道歉.

onclick='TheObject.initialize();'
Run Code Online (Sandbox Code Playgroud)

Jam*_*ice 5

我假设您的意思是您想要initialize在单击事件处理程序中运行该函数,并且您当前正在尝试这样做:

TheObject.initialize();
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,问题是TheObject实际引用的返回值initialize,因为您调用initialize了立即调用的函数表达式的返回值.而且可能性正在initialize回归undefined(很可能,它没有明确的return陈述).

为了解决这个问题,你可能想要删除眼前的呼叫initalize,这将允许您使用在页面加载上面都显示和其他地方就行了.