2015-06-21 84 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);