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 }