Wil*_*ith 9 javascript closures javascript-events addeventlistener
这基本上是一个后续问题:无法将事件传递给addEventListener:closure问题.
我已阅读几乎所有相关问题,但无法找到答案.
下面的函数在循环中执行,其中参数从数据数组中提取.使用此函数,我可以将不同/新参数传递给事件侦听器的每个实例.outer函数允许将参数的值封装在闭包中,以便实际值可用,而不仅仅是对持有者的引用.此外,passevent功能将事件传递给响应函数.最后,响应函数具有所有适当的信息以响应click事件.这非常有效.问题是,我无法弄清楚如何在以后删除事件监听器.我已经尝试了所有我能想到的东西.请帮忙.我该怎么做:removeEventListener?
(function outerfunction(i, f) {
elementname.addEventListener("click", function passeventfunction(e) {
responsefunction(e, f, i); });})(parameter1, parameter2);
Run Code Online (Sandbox Code Playgroud)
此外,如果有人可以帮助澄清这里发生的事情.这是封闭内的闭包吗?是否有留下内存泄漏的危险?谢谢!
bfa*_*tto 11
你必须保持对你的听众的引用:
var listeners = {};
for(/* ... */) {
(function outerfunction(i, f) {
var listener = function(e) {
responsefunction(e, f, i);
}
elementname.addEventListener("click", listener);
listeners[elementname.id] = listener; // use something meaningful
// as your keys
})(parameter1, parameter2);
}
// Removing the listener later:
elementname.removeEventListener("click", listeners[elementname.id]);
Run Code Online (Sandbox Code Playgroud)