在哪里放置 addEventListener 的闭包
Where to put closure for addEventListener?
我读到可以在循环中使用 addEventListener 的闭包(addEventListener 使用 for 循环和传递值)。
但是,此方法不适用于更复杂的示例:
function f(fevent) {
var a = document.createElement('a');
a.innerHTML = 'Test';
a.href = '#';
a.addEventListener('click', fevent);
return a;
};
for (l = 0; l < 2; l += 1) {
for (h = 0; h < 2; h += 1) {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}
}
https://jsfiddle.net/yasnujzq/
编辑:我想要的是锚点上的单击事件来提醒不同的组合(0,0),(1,0),(0,1)和(1,1)。但它总是提醒 (2,2)。
这是我从上面尝试的闭包方法:
function f(fevent) {
var a = document.createElement('a');
a.innerHTML = 'Test';
a.href = '#';
a.addEventListener('click', fevent);
return a;
};
for (l = 0; l < 2; l += 1) {
for (h = 0; h < 2; h += 1) {
(function() {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}());
}
https://jsfiddle.net/72sg8d5n/
我还尝试在闭包中添加参数:
function f(fevent) {
var a = document.createElement('a');
a.innerHTML = 'Test';
a.href = '#';
a.addEventListener('click', fevent);
return a;
};
for (l = 0; l < 2; l += 1) {
for (h = 0; h < 2; h += 1) {
(function() {
document.body.appendChild(
f(function() {alert(l+','+h);})
);
}(l,h));
}
}
https://jsfiddle.net/wxodr8p6/
也许有人可以在这方面启发我。
编辑:这是下面接受的解决方案中的方法的工作小提琴:
https://jsfiddle.net/87zp4dkr/
(function() { document.body.appendChild( f(function() {alert(l+','+h);}) ); }(l,h));
在此代码的最后一行,您将向函数传递两个参数。
在第一行,您不接受任何参数。
您不使用传递给该函数的值,您仍然使用循环中的值(每次循环时都会更改)。
(function(my_l, my_h) {
document.body.appendChild(
f(function() {alert(my_l+','+my_h);})
);
}(l,h));
相关文章:
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- Javascript.闭包和dynamic'这'实际上具有约束力
- 构造函数函数闭包变量
- 闭包js框架-将ArrayBuffer转换为字符串
- 如何在Angularjs中重构闭包中的重复代码
- 如何告诉闭包javascript编译器不要混淆webkitAudioContext的方法名称
- Google闭包和生成的getters/ssetter
- 如何冻结函数's在闭包中的变量
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 使变量可用于不带闭包的异步调用
- 就良好实践而言,带闭包的javascript原型是一件好事吗