繁体   English   中英

带有设置超时时间更改的 Javascript for 循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM