2013-01-19 63 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)