《学习jQuery》一书中提到,IE存在内存泄漏问题,当DOM对象拥有一个引用函数的属性,并且该函数也引用了DOM对象,两者之间就会出现“循环引用”的情况,如下所示:
onload = function() {
var foo = document.getElementById('foo');
foo.onclick = function() { // DOM object foo's onclick property refers to a function
foo.innerHTML = "hello" // the function's body refers to the DOM object
} // therefore circular reference
}
IE可以处理循环引用的垃圾回收,但是当循环引用涉及DOM对象和Javascript对象时,则无法处理,因为它们由不同的内存管理器处理。
而且:
[内存泄漏...和]由此产生的[引用]循环即使在用户离开页面后IE也不能释放它,直到浏览器关闭。
这是真的吗?为什么IE即使用户离开页面也不释放这些内存?是因为用户可能会单击“返回”并返回页面,而IE希望保留页面的状态吗?在这种情况下,如果用户在内存泄漏页面上,然后单击“返回”,然后转到google.com怎么办?然后该页面将无法通过任何“返回”或“前进”查看,并且内存泄漏问题可以在不关闭浏览器的情况下消失吗?
甚至在关闭选项卡时,而不关闭浏览器时呢?
这种内存泄漏是否也会发生在IE 8中?