1. 程式人生 > >JS基礎 關於閉包在for迴圈中的使用

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 }