javascript - 在特定时间段内暂停javascript线程

标签 javascript jquery

如何在特定时间段内停止执行 javascript? 使用 setTimeout 函数能够在延迟后执行语句 block ,但在等待期间,setTimeout 旁边的语句正在执行。我可以暂停这个同步执行吗?

根据要求,我在 for 循环中有 setTimeout 函数。但在等待期间循环正在执行。

示例代码如下:

for(i = 0;i < n;i++){
    setTimeout(function(){
        // Accessing the loop variable i inside this function
    },3000);
}

http://jsfiddle.net/KK2mq/2/

最佳答案

您可以使用一个闭包,以便 i 的正确值使用:

for (let i = 0; i < 5; i++) {
  let divId = document.getElementById("withTimeout");
  (function(i) {
    if (i % 2 == 0) setTimeout(function() {
      divId.innerHTML += i + " ";
    }, 3000);
  })(i);
}

for (let i = 0; i < 5; i++) {
  let divId = document.getElementById("withoutTimeout");
  if (i % 2 == 0) {
    divId.innerHTML += i + " ";
  }
}
<h3>with timeout</h3>
<div id="withTimeout"></div>
<h3>without timeout</h3>
<div id="withoutTimeout"></div>

这会导致您的两个输出显示相同的值。但是您是否希望数字相继出现 3 秒?如果是这样,您可以这样做:

(function display(i, step, max) {
  let divId = document.getElementById("withTimeout");
  setTimeout(function() {
    divId.innerHTML += i + " ";
    i += step;
    if (i <= max) display(i, step, max);
  }, 3000);
})(0, 2, 4);
<div id="withTimeout"></div>

display函数是递归的,显示前一个数字后每3秒调用一次自己,只要i <= 4 . (...)(0, 2, 4)围绕整个事情意味着立即调用这个函数,参数为 (0, 2, 4) .

关于javascript - 在特定时间段内暂停javascript线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377191/

相关文章:

javascript - jQuery 引用创建的元素

javascript - IE8 和 IE9+ 的日期上 toJSON() 的结果不同

防御输入窃取攻击的Javascript代码片段

javascript - 绕过键盘重复的方法?

javascript - 使用 jQuery 如何获取目标元素上的右键单击坐标

javascript - 如何使用 JavaScript 检查 div 中是否有 svg?

jquery - CSS 选择隐藏元素

javascript - 从 JavaScript 继承方法访问变量

javascript - 我的函数没有正确解析吗?此外,它不会将 firebase 写入数据库。没有错误

jquery - 使用 jQuery 从 <a> 元素中选择文本?