javascript - 关闭内存泄漏并修复

标签 javascript memory-leaks closures

通过 Mozilla's A re-introduction to JavaScript ,以下代码会导致内存泄漏:

function addHandler() {
  var el = document.getElementById('el');
  el.onclick = function() {
    el.style.backgroundColor = 'red';
  };
}

下面修改后的代码会不会因为 onclick 函数中没有引用 el 而导致内存泄漏?

function addHandler() {
  var el = document.getElementById('el');
  el.onclick = function() {
    this.style.backgroundColor = 'red';
  };
}

最佳答案

是的,可以防止内存泄漏,您可以通过放弃局部变量 el 并直接分配元素的 onclick 属性来更加简洁:

function addHandler(){
  document.getElementById('el').onclick = function(){
    this.style.backgroundColor = 'red';
  };
}

因此,在 onclick 回调中,this 引用执行点击事件的元素本身,因此使用 this 很简单以便在单击时在元素上设置样式(即 backgroundColor)。

关于javascript - 关闭内存泄漏并修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30496713/

相关文章:

javascript - 通过 Selenium Webdriver 验证 JavaScript 错误

c++ - 如何消除 Qthreads 中的内存泄漏? 12+Gb 泄漏

objective-c - 应用程序终止时泄漏

ios - 无法调用来自 SDWebImage 的调用

javascript - 为什么我无法访问原型(prototype)函数(使用闭包)?

c# - 引用非标量闭包 c#

javascript - 如何使用 Parcel JS 从文件夹导入所有图像

javascript - Flow 中的 HTML 属性?

javascript - jquery如何访问选定的数据

c++ - 变量 'equation' 周围的堆栈已损坏