2011-10-02 78 views
4
function outer(){ 
    var a, b, c; 

    function inner1(){ 
    ... 
    } 

    function inner2(){ 
    ... 
    } 

    inner1(); 
    inner2(); 
    ... 
} 

我想保持全局名稱空間乾淨,所以我寫了上面的代碼。內部函數僅用於Outer內部的代碼。但在此之後,我開始考慮這是否會導致任何記憶問題。我不確定內部函數是事先創建的還是每次創建outer()時都創建?他們會導致內存泄漏?這個javascript會導致內存泄漏嗎?

有人可以幫助解釋當調用outer()和返回時會發生什麼?請參閱我是否有任何關於JavaScript內存管理的好書或文章。我總是對這樣的問題感到困惑。謝謝。

回答

0

在回答你關於創建的內部函數的問題:我相信你每次運行outer()時都會創建/定義內部函數,並且大多數JS解釋器應在運行outer()之後垃圾收集它們以及函數範圍內的所有其他變量 - ,除非outer()將這些內部函數「輸出」到它自己的範圍之外,例如將它們分配爲事件處理程序或將它們包含在返回語句中供以後使用。

+0

那麼,如果他們正在出口和使用,我不會稱之爲泄漏。 – davin

+0

@davin - nope,我也沒有。我沒有真正解決內存泄漏問題,只是每次調用outer()時創建內部函數的問題。 – nrabinowitz

0

除非你把一些其他代碼放在裏面 - 你不應該擔心在這種簡單的關閉中泄漏。現代的JavaScript引擎處理得很好。

1

使用JavaScript在瀏覽器中導致內存泄漏的主要問題是,DOM和JS有兩個獨立的垃圾收集器。如果您在閉包函數中開始引用DOM元素,然後再次引用該函數中的某些內容,則會遇到問題。你的結構沒有泄漏,但你想做更多的東西,可能會泄漏。