我繼承了一個代碼庫,我需要爲我的工作進行更新。我正在慢慢地學習他們正在試圖用閉包實現的目標,但是當嘗試更新使用此功能的網站的一部分時,我陷入了困境。我將給出代碼試圖完成的基本概述,看看是否有人可以提供幫助。Javascript關閉返回undefined
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();
因爲我顯然不能在網站上顯示生產代碼,這將不得不做。但基本上非常大型的依賴數據變量是函數的入口。當頁面加載時調用初始化函數,一切都很開心。但是現在我需要將它添加到舊頁面的onclick事件中,並且螢火蟲控制檯表示該變量未定義。在其他頁面中,我可以毫無問題地使用它。
我的問題是什麼魔術正在導致閉包不成爲這樣的可調用名稱空間的一部分。我有點像JavaScript,所以我很抱歉如果這個問題聽起來有誤。
onclick='TheObject.initialize();'
你能告訴我們'onclick'事件的代碼嗎? – crush
'verylargeDependentData()'不存在於全局範圍內,因此您不能以這種方式調用它。目前只能通過'TheObject.initialize()'調用。 (由於錯別字難以辨認) – crush
'verylargeDependentData'不是一個函數(除了超出範圍之外),你究竟在做什麼?當按下按鈕而不是頁面加載時初始化它? – jerry