JavaScript,内存泄漏,垃圾收集。试着轻松出路?

时间:2012-12-19 11:39:44

标签: javascript variables garbage-collection

让我说我有一个'神奇'的功能......(神奇的将被解释)

var arr = ['hello','I','am','in','an','array'];  

(function() {
    var z = document.getElementById('z');
    //before edit: a = arr;

    //let's leak memory... for fun!
    z.onclick = function () {
        var something = ...; //something, the uglier the better :P
        //before edit: a.push(something);
        arr.push(something);
        something = null;  
    };

    //now lets say by doing so I 'magically' fix my memory leak
    //before edit: a = z = null;
    z = null; 
}());

但如果我这样做会怎么样......

//instead of a = z = null;
return null;  

通过将null重新调整为我的自调用函数会标记所有本地变量(a,z)以进行垃圾回收,还是它们仍会在浏览器中引用并因此仍占用内存?

注意:我正在尝试考虑ie7等传统浏览器。此外,我正在'尝试'自学JavaScript,所以这可能没有多大意义。

1 个答案:

答案 0 :(得分:4)

因为你已经将闭包函数绑定到onclick。保持与“var a”关联的内存,直到您释放onclick处理程序。

  
      
  1. 即使你没有将'var a'设置为null,与'var a'关联的内存也应该是无关紧要的,因为'var a'只引用了一个全局对象'arr'。
  2.   
  3. 将'var z'设置为null无效。
  4.   
  5. 如果您可以避免在闭包中使用'var a',那么'var a'将被释放。
  6.   
  7. 当点击发生时,函数将获得运行时错误,因为'var a'为空。
  8.   
  9. 从函数返回null对内存使用没有意义。
  10.