如何定期打印价值?

时间:2016-08-08 14:24:53

标签: javascript

我在java脚本中使用闭包在每2秒后打印1-10值。换句话说,首先打印1然后等待两秒然后打印2.我使用了闭包但没有任何效果。

这是我的代码。

for (var i = 0; i < 10; i++) {
    (function (index) {
        setTimeout(function () {
            console.log(i);
        }, 2000);
    })(i);
}

5 个答案:

答案 0 :(得分:1)

使用setInterval

&#13;
&#13;
function loopWithDelay(callback, delay, max, min) {
  var i = min || 0;
  if (i <= max) {
    var id = setInterval(function() {
      callback(i);
      if (++i > max) clearInterval(id);
    }, delay);
  }
}

loopWithDelay(function(i) { console.log(i) }, 2000, 10);
&#13;
&#13;
&#13;

或使用递归setTimeout

&#13;
&#13;
function loopWithDelay(callback, delay, max, min) {
  var i = min || 0;
  if (i <= max) {
    setTimeout(function() {
      callback(i);
      loopWithDelay(callback, delay, max, ++i);
    }, delay);
  }
}

loopWithDelay(function(i) { console.log(i) }, 2000, 10);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用setInterval

创建一个自我调用的函数,而不是使用setTimeout

  (function myFunc(index) {
    setTimeout(function() {
      console.log(index);
      if (index < 10) myFunc(++index);
    }, 2000)
  })(1);

答案 2 :(得分:0)

请查看下面的代码段。

&#13;
&#13;
var i=1;
var interval = setInterval(function(){ 
  if(i<11){
    console.log(i);  
    i++;
  }else{
    clearInterval(interval);
  }

},2000);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以为其创建一个函数并使用递归setTimeout调用。

function printDelay(current, last, delay) {
   console.log(current);
   if(++current <= last) {
      setTimeout(function() {
         print(current, last, delay);
      }, delay);
   }
}

printDelay(1, 10, 2000);

答案 4 :(得分:0)

这里没有提出一个选项,一个可能最接近执行的选项&#34;准时,&#34;只是在同一时间设置所有超时,每个超时在执行前都有所需的延迟。如果你有一个较小的固定数字,这应该没问题。

&#13;
&#13;
for (var i = 0; i < 10; i++) {
  setTimeout(function() {
    console.log(i + 1); // Add 1 to i for display purposes
  }, (i + 1) * 2000); // Execute every 2 seconds starting at 2 seconds
}
&#13;
&#13;
&#13;

这基本上与:

相同

&#13;
&#13;
for (var i = 1; i <= 10; i++) {
  setTimeout(function() {
    console.log(i);
  }, i * 2000); // Execute every 2 seconds starting at 2 seconds
}
&#13;
&#13;
&#13;

要立即启动而不是2秒后,第一个超时值必须为0而不是2000(毫秒)。