【问题标题】:Closure memory leak and fix关闭内存泄漏并修复
【发布时间】:2015-05-28 03:26:55
【问题描述】:

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

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

由于el 没有在onclick 函数内部被引用,以下修改后的代码会不会导致内存泄漏?

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

【问题讨论】:

  • 如果这就是你要问的,你仍然在柯里化一个变量,在这种情况下是this。还要确保您了解thisself 之间的区别。
  • 谢天谢地,很快将不再有 Internet Explorer。现在的浏览器可以文明地处理垃圾回收了。
  • 该代码仅导致 IE 泄漏,即多年前撰写本文时出现的 IE。别担心。

标签: javascript memory-leaks closures


【解决方案1】:

是的,内存泄漏会被阻止,你可以更简洁地抛弃局部变量el,直接分配元素的onclick属性:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 2012-01-12
    • 1970-01-01
    • 2013-07-29
    • 2017-07-29
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多