我以爲我理解了閉包,但突然之間有些簡單的東西似乎沒有奏效。關閉不保持狀態變化
我已經使用閉包創建了一個單例。這裏是一個非常精縮版:
Foobar = function() {
var data = null;
function init(obj) {
data = obj;
}
return {
init: init,
currentValue: data
}
}();
既然是單身,我希望,當我稱之爲「初始化」功能,「數據」的值將在所存在的唯一對象改變了,並且該值在使用'currentValue'的後續檢索中仍然可用。
這裏是我的測試:
Foobar.init({id:3});
var test = Foobar.currentValue;
當我通過這個代碼在Firefox(F12)步驟,我可以看到是 - 「數據」是可見的初始化函數,並且它正在改變當我執行'init'時變量。但是,在退出init函數並返回執行測試的第二行之後,var'test'被賦值爲null(創建單例時的原始值),而不是我傳遞給'init'函數的對象的副本,正如我所料。
有人可以澄清我的困惑嗎?
SO說避免謝謝,但在這種情況下......太多次了,所以SO答案專注於解決微型示例或特殊情況下的錯誤,而不回答問題。當它不能幫助下一個人時,他們再次提出問題以獲得對實際問題的一般情況答案,他們會因重複問題而遭到拒絕。你實際上已經回答了這個問題,並且教會了我一些東西,而不是「修正錯誤」,這使得我不太可能在未來重複錯誤。這些答案是我重視SO的原因。 – JackLThornton