2011-04-09 89 views
1

請參見下面的代碼。我試圖將它剝離到它的裸露的骨頭。我有個_queue數組。我想迭代10次。在每次迭代中,我想創建一個具有適當範圍的j參考的函數(即第一次迭代時j = 0,第二次迭代中j = 1等)。如何在循環中創建閉包並將其存儲在變量中以供稍後執行

我想將該函數存儲在變量f,然後將f添加到_queue數組中,以便稍後調用它。

問題當然是,在第一個循環的每次迭代中,不是在f中存儲閉包,而是立即執行閉包。

我的問題是這樣的:如何將函數存儲到適當的j變量中,以便將它添加到_queue數組中?

_queue = []; 

    for (j = 0; j < 10; j++) { 

     var f = 
      (function (index) { 
      alert(index); 
     })(j);     //code is executed here instead of stored in the f variable 

     _queue.push(f); //Add f 

    } 

    for (k = 0; k < _queue.length; k++){ 
     _queue[k].call(); 
    } 
+0

+1,好問題 – Johan 2011-06-04 19:53:45

回答

8

使用即時函數(或通常使用函數)引入新範圍是正確的。但是,你必須從眼前函數返回一個函數:

var f = (function (index) { 
    return function() { 
     alert(index); 
    }; 
}(j));  
+0

幾秒:) +1 +1 – 2011-04-09 16:02:25

+0

打我的,順便說一句,這是不是真的有必要附上函數調用括號(這就像說'var f =(10);') – Jan 2011-04-09 16:03:10

+0

美麗!謝謝! – Trevor 2011-04-09 16:20:14

相關問題