javascript - setTimeout 在无限循环中不起作用

标签 javascript html

    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/

相关文章:

javascript - CSS 一致性工具

html - 将元素定位在 div 的底部(不是父元素)- Twitter Bootstrap v3

javascript - 让移动Rect更流畅

javascript - typescript 和等效的js代码

javascript - ember.js 显示项目列表,每个项目都有自己的 View / Controller

javascript - 在包含 javascript 的网站上使用 NodeJS 进行抓取

html - CSS 多动画关键帧序列和延迟不起作用

javascript - 如何在 IE 中仅检测鼠标悬停而不检测 touchstart?

html - 如何将 block 内的图像和文本居中

html - 如何保留元素的悬停区域?