我在java脚本中使用闭包在每2秒后打印1-10值。换句话说,首先打印1然后等待两秒然后打印2.我使用了闭包但没有任何效果。
这是我的代码。
for (var i = 0; i < 10; i++) {
(function (index) {
setTimeout(function () {
console.log(i);
}, 2000);
})(i);
}
答案 0 :(得分:1)
使用setInterval
:
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;
或使用递归setTimeout
:
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;
答案 1 :(得分:0)
您可以使用setInterval
创建一个自我调用的函数,而不是使用setTimeout
(function myFunc(index) {
setTimeout(function() {
console.log(index);
if (index < 10) myFunc(++index);
}, 2000)
})(1);
答案 2 :(得分:0)
请查看下面的代码段。
var i=1;
var interval = setInterval(function(){
if(i<11){
console.log(i);
i++;
}else{
clearInterval(interval);
}
},2000);
&#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;只是在同一时间设置所有超时,每个超时在执行前都有所需的延迟。如果你有一个较小的固定数字,这应该没问题。
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;
这基本上与:
相同
for (var i = 1; i <= 10; i++) {
setTimeout(function() {
console.log(i);
}, i * 2000); // Execute every 2 seconds starting at 2 seconds
}
&#13;
要立即启动而不是2秒后,第一个超时值必须为0而不是2000(毫秒)。