Javascript for loop with settimeout time change
Javascript for loop with settimeout time change
所以我试图增加 for 循环中的超时时间,我按照此处的答案 setTimeout with Loop in JavaScript 但是当我输出日期以检查时差.
代码:
for (var count = 0; count < 12; count++) {
(function(num){setTimeout(function() {
console.log("Count = " + num + " Time: " + 1000 * num + " Stamp: " + new Date());
}, 1000 * num)})(count);
}
正如您在控制台中看到的那样,它仍然每 1000
触发 console.log
而不是 1000 * count
。
我希望以上内容有意义,希望有人能解释这种行为。
代码按预期运行。
所有定时器几乎同时设置,因为它们是异步的。因此,计时器已设置,代码会继续加载其他计时器,而无需等待代码执行。
第一个计时器将在 1 秒后关闭。
第二个定时器将在 2 秒后响起。但是定时器设置后两秒,与定时器1设置的时间相同。
以此类推
因此,每个计时器都在 1000 * 计数时触发。
这是您要找的吗?增加每次迭代的时间 1second * some count
let i = 0;
loop = () => {
setTimeout(() => {
console.log("Count = " + i + " Time: " + 1000 * i);
i++;
if (i < 10) {
loop();
}
}, i * 1000)
};
loop();
这里有一个REPL,你可以打运行
解释:尝试运行使用此代码
for (var i = 1; i < 5; i++) {
setTimeout(() => console.log(i), 1000)
}
我们希望输出为 1 2 3 4 但实际上是 5 5 5 5,这是因为 js 运行time 引擎不等待 settimeout 完成,而是将其传递到网络 API 并在那里排队,因此 for 循环首先执行使 i = 5,然后在稍后的时间点 Web API 触发设置超时功能。这个你可以详细了解here。
所以我试图增加 for 循环中的超时时间,我按照此处的答案 setTimeout with Loop in JavaScript 但是当我输出日期以检查时差.
代码:
for (var count = 0; count < 12; count++) {
(function(num){setTimeout(function() {
console.log("Count = " + num + " Time: " + 1000 * num + " Stamp: " + new Date());
}, 1000 * num)})(count);
}
正如您在控制台中看到的那样,它仍然每 1000
触发 console.log
而不是 1000 * count
。
我希望以上内容有意义,希望有人能解释这种行为。
代码按预期运行。
所有定时器几乎同时设置,因为它们是异步的。因此,计时器已设置,代码会继续加载其他计时器,而无需等待代码执行。
第一个计时器将在 1 秒后关闭。
第二个定时器将在 2 秒后响起。但是定时器设置后两秒,与定时器1设置的时间相同。
以此类推
因此,每个计时器都在 1000 * 计数时触发。
这是您要找的吗?增加每次迭代的时间 1second * some count
let i = 0;
loop = () => {
setTimeout(() => {
console.log("Count = " + i + " Time: " + 1000 * i);
i++;
if (i < 10) {
loop();
}
}, i * 1000)
};
loop();
这里有一个REPL,你可以打运行
解释:尝试运行使用此代码
for (var i = 1; i < 5; i++) {
setTimeout(() => console.log(i), 1000)
}
我们希望输出为 1 2 3 4 但实际上是 5 5 5 5,这是因为 js 运行time 引擎不等待 settimeout 完成,而是将其传递到网络 API 并在那里排队,因此 for 循环首先执行使 i = 5,然后在稍后的时间点 Web API 触发设置超时功能。这个你可以详细了解here。