Javascript 闭包返回未定义

标签 javascript web closures

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

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(); 

因为我显然不能在站点上显示生产代码,所以必须这样做。但基本上 veryLargeDependentData 变量是函数的入口。当页面加载时,它会调用初始化函数,一切都很顺利。但是现在我需要将它添加到旧页面的 onclick 事件中,并且 firebug 控制台显示该变量未定义。在其他页面中,我可以毫无问题地使用它。

我的问题是发生了什么魔法导致闭包不属于这样的可调用命名空间的一部分。我是一个 javascript nOOb,所以如果这个问题听起来被误导了,我深表歉意。

onclick='TheObject.initialize();'

最佳答案

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

TheObject.initialize();

如果是这样,问题是 TheObject 实际上指的是 initialize 的返回值,因为你在返回时调用了 initialize立即调用的函数表达式的值。 initialize 很有可能返回 undefined(很可能,它没有显式的 return 语句)。

要解决这个问题,您可能希望删除对 initalize 的立即调用,这将允许您在页面加载和其他任何地方使用上面显示的行。

关于Javascript 闭包返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859930/

相关文章:

javascript - onError 事件未按预期运行

javascript - JS AWS SQS 不返回消息

web - 以下 lisp 程序没有按预期工作

php - Mysqli 准备好的语句在 SQL 中工作但不在我的应用程序中

groovy - 创建一个新类 "on the fly"?

javascript - ajax中如何传递下拉值

javascript - 正则表达式 - 提取双引号之间的字符串,其中行以关键字开头

javascript - 单击时 HTML 下拉菜单不会保持打开状态

jquery - 如何将 jquery 自动完成与 var 一起使用?

Javascript闭包,调用函数的不同方式