while(true){
window.setTimeout(function() {
myMethod()
}, 15000);
}
function myMethod() {
alert("repeat");
}
上面的代码是为了无限地执行我的方法而写的,但在一定的时间间隔内,但是一旦我运行代码,我的浏览器就会挂起,并且会不断生成重复弹出窗口,但这里的时间是 15 秒。我想避免 setInterval,因此出于我的目的使用此技术。
最佳答案
Javascript 是单线程的(网络 worker 除外,但这与本示例无关,因此我们将忽略它)。这意味着 setTimeout 实际上做的是安排一些代码在未来的某个时间执行,至少在一段时间后,但只有当浏览器停止了当时在渲染线程上所做的任何其他事情时,这可能正在渲染 html,或执行 javascript。
因此,在 while 循环(以及包含它的任何代码)完成并将控制返回给浏览器之前,setTimeout 中的代码无法执行。但它是一个无限循环,因此控制权永远不会返回到浏览器,并且永远不会执行 setTimeout 中的代码。
事实上,javascript 中的一个常见习语是使用超时为 0(或可能为 1)的 setTimeout,以便在当前事件的代码执行后尽快执行某些代码,通常在浏览器呈现了由 javascript 所做的任何 html 更改。
我不知道您的确切用例是什么,但您可以使用 setInterval(类似于 setTimeout,但会按一定间隔重复调用)或通过在setTimeout 以递归实现无限循环,但让浏览器在迭代之间执行其他任务。
关于javascript - setTimeout 在无限循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34783012/