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)
我假设您的意思是您想要initialize在单击事件处理程序中运行该函数,并且您当前正在尝试这样做:
TheObject.initialize();
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,问题是TheObject实际引用的返回值initialize,因为您调用initialize了立即调用的函数表达式的返回值.而且可能性正在initialize回归undefined(很可能,它没有明确的return陈述).
为了解决这个问题,你可能想要删除眼前的呼叫initalize,这将允许您使用在页面加载上面都显示和其他地方就行了.