JavaScript闭包中的循环(二)

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));
}



猜你喜欢

转载自blog.csdn.net/qq_33745501/article/details/78559265
今日推荐