<body>
    <div id="bb">
        <div id="aa">
            cc</div>
    </div>
    <script type="text/javascript">
        function leakTest() {
            var a = []; //用来加大闭包资源占用,方便观察  
            for (var i = 0; i < 100000; i++) {
                a.push('a');
            }
            var bbcc = new Object();
            var divA = document.getElementById('aa');
            divA.kk = function() { };
            divA.parentNode.removeChild(divA);
        }
        leakTest();  
    </script>    
</body>divA.kk = function() { };函数中并没有引用外部变量,这是否是个闭包?

解决方案 »

  1.   

    这里和闭包没啥关系,主要是这3行代码var divA = document.getElementById('aa');
    divA.kk = function() { };
    divA.parentNode.removeChild(divA);第三行代码中,你已经把divA从HTML中移除了,但你的第二行仍然保存着对divA的引用,这里内存泄漏了divA.kk=null;
    divA=null;即可
      

  2.   

    第三行代码中,你已经把divA从HTML中移除了,但你的第二行仍然保存着对divA的引用,这里内存泄漏了恩 说的很好~~~
      

  3.   

    内存泄漏?
    漏洞应该不大吧。
    毕竟当function leakTest(){};
    执行完毕后 divA  就离开作用域了,
       js 拉圾 机制 自动回收 divA   了。
     
      

  4.   

    5楼兄台什么意思,给解释解释。还有:
    var divA = document.getElementById('aa');
    divA.kk = function() { };
    divA.parentNode.removeChild(divA);
    “但你的第二行仍然保存着对divA的引用”,第二行怎么产生的divA的引用?
      

  5.   

    还有就是divA.kk后面是对象刚不会产生泄露,函数则会
      

  6.   

    是啊,每次刷都+2.2Mb
    可是 好123 更加严重。 是你的2倍多。5.几Mb内存是漏了,
     可不知漏哪里去了。 
      

  7.   

    再刷多几次,又否定了。
    我用firefox
    打开你代码那一页


    ......
    从91 Mb 
    慢慢加到 98Mb
    再次刷。
    又变回 91 Mb

    可见,不是页面有内存泄漏。 
       就算是,也没有危险!