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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章