javascript - 这个解决方案是否正确处理 DOM 内存泄漏

标签 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,为什么可以解决这个问题?

谢谢

最佳答案

两种情况都存在泄漏。您必须释放指向 DOM 对象的 btn 变量和 onclick 事件才能停止监听该事件。

关于javascript - 这个解决方案是否正确处理 DOM 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50048315/

相关文章:

javascript - 从工作 jsfiddle 复制到本地环境中时,jQuery 和其他 JS 未运行?

c++ - 在 C++ 中正确使用堆栈和堆?

c++ - 在 C++ 中使用指针时的内存管理

c - 指针和 realloc 的问题,C 中的程序崩溃错误

javascript - 如何使用 Angular js 从另一个数组创建 JSON 对象数组

javascript - Backbone.syphon 处理多个复选框

javascript - 如何在 RubyRacer 中评估 HTML DOM 对象(如 "document")

javascript - React 中的组件相互重叠

javascript - 如何使 Leaflet 图层控件中的复选框表现得像单选按钮

javascript - 未捕获的类型错误 : Cannot read property '0' of undefined javascript error and with highcharts