1.实例一:
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', function() {
console.log('You clicked element #' + i);
});
}为了解决闭包所带来的影响,输出预期的效果。有两种解决方案。
方法一:使用IIFE
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', (function(num) {
console.log('You clicked element #' + num);
})(i));
}方法二:使用外部函数
function handler(i){
console.log('You clicked element #' + i);
}
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click',handler(i));
}
本文介绍了解决JavaScript中因闭包导致的问题,通过两种方法——即时执行函数表达式(IIFE)和使用外部函数来确保点击事件处理器能正确地引用当前循环变量的值。
342

被折叠的 条评论
为什么被折叠?



