JS基础 关于闭包在for循环中的使用

主要是针对ES5的语法,因为ES6中有块级作用域了(尽管我不知道为什么我还一直在用es5的语法)

先展示一段问题代码

1 for (var i = 0; i < data.length; i++) {
2      var $btn=$('#iBtn');
3      $btn.on('click',function(e){
4            alert(data[i].name)
5      }          
6 }    

然后你会发现为很多个元素绑定一个点击事件的时候,所有的btn的弹出的永远是data里面最后一个值。

这时候就用到闭包,闭包的作用就是让当前作用域的值不会被垃圾回收。

1 for (var i = 0; i < data.length; i++) {
2      (function (row) {
3          var name =row.name;
4          var $btn=$('#iBtn');
5          $btn.on('click',function(e){
6                alert(name);
7          }
8      })(data[i])
9 }

猜你喜欢

转载自www.cnblogs.com/CoffeeEddy/p/9950642.html