Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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 较新版本的Internet Explorer是否修复了循环引用内存泄漏?_Javascript_Performance - Fatal编程技术网

Javascript 较新版本的Internet Explorer是否修复了循环引用内存泄漏?

Javascript 较新版本的Internet Explorer是否修复了循环引用内存泄漏?,javascript,performance,Javascript,Performance,我目前在一个使用长寿命页面(LLP)的项目中工作,这让我担心性能和内存泄漏 回顾一些,我发现这可能会导致内存泄漏: function addHandler() { var el = document.getElementById('el'); el.onclick = function() { this.style.backgroundColor = 'red'; }; } 起初我不明白为什么,但很容易找到很多解释。我发现了一个at代码项目,在道格拉斯·

我目前在一个使用长寿命页面(LLP)的项目中工作,这让我担心性能和内存泄漏

回顾一些,我发现这可能会导致内存泄漏:

function addHandler() {
    var el = document.getElementById('el');
    el.onclick = function() {
        this.style.backgroundColor = 'red';
    };
}
起初我不明白为什么,但很容易找到很多解释。我发现了一个at代码项目,在道格拉斯·克罗克福德的这篇文章和这篇文章中有更详细的解释

现在我的问题是:

据我所知,这个特定的漏洞是一个IE特有的bug,对吗?而且,更重要的是:在比尔叔叔的公司推出我们深爱的蓝色浏览器之前,我应该担心这个漏洞的哪个版本

编辑: 关于最后一个问题的可靠参考资料是可取的

编辑#2: 也许我错了,但我认为使用“新”标准化的活动界面,我们不会遇到同样的问题:

function addHandler() {
    var el = document.getElementById('el');
    el.addEventListener('click', function() {
        this.style.backgroundColor = 'red';
    });
}
由于没有直接分配,我认为这就解决了问题。然而,这个API仅仅是IE9+,这让我想知道我们是否会在库的回退中遇到同样的问题,例如jQuery:

var $el = $('.some-el');
$el.on('click', function(){
    // ...
});

我对jQuery内部的了解还不足以说明这段代码在IE8上的作用。

声称IE8“缓解”了这个问题。不管是不是这样。。。这里有一个(不是答案)有一个公平的解释,也就是说IE8只有一个小的问题变体。我还认为jQuery会使用本机
elem.attachEvent()
变体,直到最近添加了
elem.addEventListener()
支持时,它才存在于IE中。我不完全确定这里的MDN是否正确;处理程序使用
this
而不是
el
@PaulS.,是的,但是outter作用域会自动“添加”到闭包作用域,创建对
el
的引用。@HenriqueBarcelos在JavaScript中是一种完全不同的机制,在调用时通过调用它的方式进行计算,而不是如何或在何处定义函数。i、 e.while
foo.bar=function(){returnthis;}
作为
foo.bar()调用
foo
,您还有
fizz.buzz=foo.bar;fizz.buzz();//fizz和foo.bar.call(fizz);//嘶嘶作响