js for循环中定义clike事件由于闭包导致的循环变量获取不到的问题

时间:2022-02-02 17:29:14

在网上找的 记下来以备不时之需

案例; 本人有一个数组按钮  循环数组按钮 给每个按钮添加click事件 原本以为搞定但是出现了 每个按钮都是数组最后的方法

然后查找问题 发现onclike事件中的i总是最后一个

在网上找的资料:

下面做下分析:因为在for循环里面指定给id i的事件处理程序,也就是onclick那个匿名函数是在for循环执行完成后(用户单击链接时)才被调用的。而调用时,需要对变量i求值,解析程序首先会在事件处理程序内部查找,但i没有定义。然后,又到方法外部去查找,此时有定义,但i的值是4(只有i大于4才会停止执行for循环)。因此,就会取得该值——这正是闭包(匿名函数)要使用其外部作用域中变量的结果。而且,这也是由于匿名函数本身无法传递参数(故而无法维护自己的作用域)造成的。

解决办法:

  1. for (var i = 0; i <= list_obj.length; i++) {
  2. (function(i){
  3. list_obj[i].onclick = function() {
  4. alert(i);
  5. }
  6. })(i);
  7. }

这是在网上搜的一个解决办法 由于本人搞后台 对js处理不甚了解 发现解决办法 瞬时惊为天人 所以 特地记下来以备不时之需.