如何在setTimeout中维护循环变量的值?使用Javascript

时间:2016-01-02 17:29:11

标签: javascript loops

基本上,我有一个循环,如果满足某个条件,它会触发setTimeout。 但是超时功能需要循环的值(即'i'),如下例所示。 我该怎么做?

 for( var i = 0; i <= 10; i++) {
    if(something){
      setTimeout(function(){
         console.log(i);
      }, 1000);
    }
 }

2 个答案:

答案 0 :(得分:2)

使用 IIFE(立即调用的函数表达式),它是一种JavaScript设计模式,它使用JavaScript的函数范围生成词法范围。

 for( var i = 0; i <= 10; i++) {
    if(something){
        (function(i){
            setTimeout(function(){
               console.log(i);
            }, 1000);
         })(i);
     }
 }

答案 1 :(得分:0)

for (var i = 0; i <= 10; i++) {
  if (true) {
    setTimeout((function(i) {
     return function() { console.log(i); }
    })(i), 1000 * i);
  }
}

我觉得你想要时间1000 * i? (它已经在上面的代码中)