function attachEvents() {
var element = document.getElementById("myID");
element.onclick = function() {
alert("Element clicked");
}
};
attachEvents();
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
好久没有研究内存泄漏的课题了。姑且猜猜吧。
attachEvents 原本是一次性执行结束的,但其中包含了一个匿名的函数——那个监听器,结果它就被这个监听器“绑架”了(不能安心地驾鹤西去)。
而监听器又被绑定给了element对应的DOM对象。DOM对象只要还在网页中,那么就一直有效。
但我不太清楚:
内存泄漏是closure的原因造成的。闭包是由函数和构建函数的环境所组成的。 按理说,函数运行完成后,内部变量会被销毁。但是看这段代码,attachEvent函数内部返回了click函数,构造了一个闭包,这就导致了element变量会被onclick函数所引用。因此javascript垃圾回收器并不会回收element变量。 除了element=null的方法外,还可以把函数写在外面来避免。
这段代码会引起内存泄露啊。。。。我经常这么做。。。。晕了!
这个研究方向不错,很支持。JS高手可以来我找兼职