2013-01-19 71 views
0
(function(){ 
    var a; 

    function inner1(arg){ 
    a = arg; 
    } 

    function inner2(){ 
    alert(a); 
    } 

})(); 

這會導致我的應用程序中發生內存泄漏,因爲我在另外兩個內部函數之外聲明變量a。內部函數中的內存泄漏

+3

這被稱爲[詞法作用域](http://stackoverflow.com/q/1047454/1331430),又名JS的範圍鏈,的語言中最常見的問題之一。所有JS實現都有一個GC(垃圾回收器),通過從內存中刪除不再引用的對象來處理內存問題。除了當你有循環引用,移除仍然附加處理程序的元素和一些IE錯誤時,你通常不會遇到「內存泄漏」的問題。 –

+0

由於這個示例函數沒有*沒有*,所以不會有泄漏數據。垃圾收集取決於*組成*功能仍然引用您的數據 – Bergi

回答

2

不,因爲您已經在匿名函數閉包中聲明瞭該變量。

您可以通過執行以下操作來證明這一點。

(function(){ 
    var a; 

    function inner1(arg){ 
    a = arg; 
    } 

    function inner2(){ 
    alert(a); 
    } 

})(); 

alert(a)