正确的方法来防止DOM事件侦听器上的内存泄漏

时间:2010-08-31 15:57:46

标签: javascript html dom addeventlistener

关于DOM的一些愚蠢问题,请不要讨厌我

由于某些原因,我需要将一个匿名函数传递给addEventListener(主要是“传递”上下文变量)但是一旦调用了一个侦听器就可以删除了所以我想知道下面显示的代码是否正确分离了监听器的方法

    var item = document.createElement("div");
    item.addEventListener("click", function(event) {
        // do some stuff
        // remove listener otherwise we generate a memory leak
        item.removeEventListener("click", arguments.callee, false);
    }, false);

    var menu = document.getElementById("mymenu"); // some element
    menu.appendChild(item);

另一个问题,如果使用removeChild从其父元素中删除元素菜单,则会自动删除该侦听器?

1 个答案:

答案 0 :(得分:6)

我知道你想使用一个匿名函数,但你可能会更好地使用一个命名函数;它应该仍然可以访问相同的外部变量。

也许这就是:

var item = document.createElement("div");
var listener = function(event) {
        // do some stuff
        // remove listener otherwise we generate a memory leak
        item.removeEventListener("click", listener, false);
    };
item.addEventListener("click", listener, false);

var menu = document.getElementById("mymenu"); // some element
menu.appendChild(item);

哦,我不讨厌你:)。