JavaScript闭包中的循环(二)

来源:互联网 发布:长沙软件学校排名 编辑:程序博客网 时间:2024/06/07 16:15

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