gpt4 book ai didi

javascript - html5 和 JavaScript : is setTimeout breaking this?

转载 作者:行者123 更新时间:2023-11-28 16:05:51 25 4
gpt4 key购买 nike

我很困惑为什么下面的 html 不起作用。我希望它会继续发送警报,但发出警报后就会停止。此外,“左 fn”警报永远不会发生!谁能向我解释一下吗?我在 ubuntu 上的 firefox 中使用 html5 和 javascript。

<!DOCTYPE html>
<script>
function alertme() {
alert ("in fn");
}

while (true) {
window.setTimeout(alertme(), 3000);
alert("left fn");
}
</script>

最佳答案

一些可能的问题:

  1. alertme() 立即被调用,其返回值被传递给 setTimeout()

    要解决此问题,您可以将 alertme 作为引用传递(不带调用括号):

    setTimeout(alertme, 3000);
  2. 但是,这将与 JavaScript 的(主要)单线程性质发生冲突。

    setTimeout() 是异步的,只需启动一个计时器,该计时器从现在起不少于 3 秒到期。但是,它们要求一个线程最终忙于执行延迟的任务。

    但是,while (true) {} 是同步且无限期的,将使线程保持忙碌状态,直到所有执行都停止,并且永远不会允许超时来执行其任务。因此,您永远不会看到“in fn”

    John Resig 对计时器有一篇很好的文章:http://ejohn.org/blog/how-javascript-timers-work/

具体如何修复代码取决于意图。

关于javascript - html5 和 JavaScript : is setTimeout breaking this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com