此解决方案是否正确处理DOM内存泄漏

时间:2018-04-26 16:51:13

标签: javascript dom memory-management

所有

当我尝试关注JS DOM内存泄漏教程时,有一个关于 OLD IE (7,8)的内存泄漏示例:

<div id="myDiv">
    <button id="myBtn">Click Me</button>
</div>

<script type="text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){
        document.getElementById("myDiv").innerHTML = "Processing...";
    }
</script>

它给出的解决方案是:

<div id="myDiv">
    <button id="myBtn">Click Me</button>
</div>

<script type="text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){




        btn.onclick = null;





        document.getElementById("myDiv").innerHTML = "Processing...";
    }
</script>

我在这里感到困惑:

  1. 什么是泄漏:myBtn DOM对象或onclick函数?(我的理解:它试图说DOM,因为innerHTML试图用文本节点替换整个按钮节点)
  2. 如果DOM是泄漏,那么btn变量仍然引用DOM,这导致它无法进行GC,为什么这可以作为解决方案?
  3. 由于

1 个答案:

答案 0 :(得分:2)

The leak are in both cases. You have to free the btn variable pointing to a DOM object and the onclick event to stop listening that event.