如何在特定时间段内停止执行 javascript?
使用 setTimeout
函数能够在延迟后执行语句 block ,但在等待期间,setTimeout
旁边的语句正在执行。我可以暂停这个同步执行吗?
根据要求,我在 for 循环中有 setTimeout
函数。但在等待期间循环正在执行。
示例代码如下:
for(i = 0;i < n;i++){
setTimeout(function(){
// Accessing the loop variable i inside this function
},3000);
}
最佳答案
您可以使用一个闭包,以便 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/