2011-10-25 42 views
1

我幾乎是javascript編程的新手,我真的需要一些幫助/建議。保存javascript關閉函數中的變量

我所試圖做的事: 我有一個函數(或對象?!),它看起來是這樣的:

var svgInteraction = function (containerId) { 
    var svgNamespace = "http://www.w3.org/2000/svg", 
     htmlns = "http://www.w3.org/1999/xhtml", 
    mathns = "http://www.w3.org/1998/Math/MathML"; 

    svgInteractions = {}; 

    svgInteractions[containerId] = "I am " + containerId; 
    console.log(svgInteractions); 

    return function() { 
     console.log(svgInteractions); 
    } 
}; 

我初始化這樣一個變量:

var svg1 = svgInteraction("container_1"); 
var svg2 = svgInteraction("container_2"); 

問題就是說,對於svgInteraction的每次初始化,svgInteractions對象都將重新初始化。

它輸出:

Object { container_1="I am container_1"} 
Object { container_2="I am container_2"} 

有什麼辦法讓裏面的舊值?

謝謝

回答

1

不要它每次(svgInteractions = {})函數被調用設置爲空對象。

嘗試......

var svgInteraction = (function() { 

    var svgInteractions = {}; 

    return function(containerId) { 
    // Implementation 
    } 

})(); 

這裏,svgInteractions封裝,但它也將是靜態爲以svgInteraction所有呼叫。

+0

我沒有想過那個關閉技巧。太好了! –

+0

謝謝。 所有的實現代碼應該在返回函數裏面嗎?它就像一個init()? 另一個問題: 如何爲每次初始化保存獨立變量/函數?例如,我想要根據容器執行不同的「點擊」功能。 我正在考慮像 'svgInteractions [containerId] .clickfunction = function(){...}' –

+0

@GavanCatalin是的,你是對的。任何你想要在每個調用中被初始化的東西都應該在函數體中。 – alex