2015-06-21 107 views
1

我遇到了一個問題,那就是我設置了一堆超時調用,並且希望超時功能引用當前循環中的元素。替代循環中的「let」關鍵字?

這是個什麼結果看起來像:

var createTimedMessages = function(arr, collection){ 
     var timeLimit = 2000; 
     for(var i = 0; i<arr.length; i++){ 
      let el = arr[i]; 
      collection.push(el); 
      $timeout(function removeElement(){ 
       collection.removeMatch(el); 
      }, timeLimit); 
     } 
    } 

但我意識到這不會有因缺乏let關鍵字支持一些年齡稍大的瀏覽器。什麼是一個好的解決方法?

注意:這是在角度,因此$超時而不是setTimeout。

+0

使用嵌套函數/關閉 - 它已經完成(而像這樣工作)多年。 – user2864740

+0

是的,對不起,剛剛意識到@ user2864740找到了更好的dup目標。 – Doorknob

+0

@門把手*但是*這個問題有更好的IIFE覆蓋面。把兩者放在一起 - >贏。 – user2864740

回答

3

使用IIFE:

var createTimedMessages = function(arr, collection) { 
    var timeLimit = 2000; 
    for (var i = 0; i < arr.length; i++) { 
     (function(el) { 
      collection.push(el); 
      $timeout(function removeElement() { 
       collection.removeMatch(el); 
      }, timeLimit); 
     })(arr[i]); 
    } 
} 
0

自我執行功能應該解決的問題:

(function(el, timeLimit) { 
    $timeout(/* your code */); 
})(arr[i], timeLimit);