JS基礎 關於閉包在for迴圈中的使用
阿新 • • 發佈:2018-11-13
主要是針對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 }