Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭内存泄漏并修复_Javascript_Memory Leaks_Closures - Fatal编程技术网

Javascript 关闭内存泄漏并修复

Javascript 关闭内存泄漏并修复,javascript,memory-leaks,closures,Javascript,Memory Leaks,Closures,通过,以下代码会导致内存泄漏: function addHandler() { var el = document.getElementById('el'); el.onclick = function() { el.style.backgroundColor = 'red'; }; } 由于onclick函数中未引用el,下列修改后的代码是否不会导致内存泄漏 function addHandler() { var el = document.getElementByI

通过,以下代码会导致内存泄漏:

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
)很简单

您仍然在使用一个变量,
this
,在本例中,如果您是这样问的话。还要确保你理解
这个
自我
之间的区别。谢天谢地,很快就不会有Internet Explorer了。如今,浏览器可以文明地处理垃圾收集。这段代码只会在IE中造成漏洞,而在几年前写这篇文章时,IE已经过时了。别担心。