[英]Javascript for loop with settimeout time change
所以我试图增加 for 循环中的超时时间,我在 JavaScript 中遵循了setTimeout 和 Loop的答案,但是当我输出日期以检查时差时,setTimeout 的持续时间以毫秒为单位不起作用。
代码:
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
而不是1000 * count
触发一次console.log
。
我希望以上是有道理的,希望有人可以解释这种行为。
代码按预期工作。
所有的计时器几乎都是在异步设置的同时设置的。 因此,定时器已设置,代码继续加载其他定时器,而无需等待代码执行。
第一个计时器将在 1 秒后关闭。
第二个计时器将在 2 秒后关闭。 但是在定时器设置后两秒,也就是定时器 1 设置的时间。
等等。
因此,每个计时器都以 1000 * 计数触发。
这是你想要的? 增加每次迭代的时间 1 秒 * 一些计数
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 运行时引擎不会等待 settimeout 完成,而是将其传递到 Web API 并在那里排队,所以 for 循环首先执行使 i = 5,然后 Web API 触发设置超时功能。 您可以在 此处详细了解这 一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.