gpt4 book ai didi

javascript - 为什么在 Firefox 上 "click"事件循环完成之前会触发超时?

转载 作者:行者123 更新时间:2023-11-29 16:09:02 24 4
gpt4 key购买 nike

步骤:

  1. 在 Firefox 中运行代码
  2. 等待 5 秒(重要!)
  3. 按确定或取消
  4. 期望标志 == 0,但它是 10。

var flag;

function myFunction(){
flag = 0
console.info("initial", flag);
setTimeout(function(){
flag = 10;
}, 200);

confirm("conf");

alert("should be 0: "+flag);
}

document.getElementById('button').onclick=myFunction;

<button type="button" id="button">Click Me!</button>

最佳答案

因为与许多浏览器不同,Firefox 可能允许 JavaScript 线程运行其他代码,同时 alertpromptconfirm 模式正在显示,暂停当前代码。 (有关该句子中“可能”的更多信息,请参阅答案结尾。)调用 alert 等的任务已暂停,因此该任务中的代码不会继续,但 < em>其他 任务允许运行。

这意味着

  • 定时器可以获得回调

  • Ajax 完成处理程序可以运行

从来没有 JavaScript 在两个地方并发运行,但 Firefox 确实让线程运行其他任务,同时任务被那些模式挂起。

这是 Firefox 的一个怪癖。我第一次在 Stack Overflow 上了解到它,thanks to bobince .


为什么我说“可能”允许 JavaScript 线程运行:它曾经相当可靠(旧版本的 Firefox)。我在 Firefox 29 或 38 上复制它没有遇到任何问题。Firefox 42 似乎降低了它的可能性,但它确实仍然发生。

我希望(虽然我可能是错的)Mozilla 会改变它以与其他浏览器保持一致,因为有人可能会争辩说它违反了 JavaScript 的任务运行到完成语义,而这些语义刚刚得到加强并且由最新规范阐明。

关于javascript - 为什么在 Firefox 上 "click"事件循环完成之前会触发超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33741170/

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