vit*_*alh 2 javascript firefox confirm
脚步:
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;
Run Code Online (Sandbox Code Playgroud)
<button type="button" id="button">Click Me!</button>Run Code Online (Sandbox Code Playgroud)
因为不像许多浏览器,火狐可以允许的JavaScript线程同时运行其他代码alert,prompt和confirm情态动词都显示,暂停当前的代码.(有关该句中"may"的更多信息,请参阅答案的结尾.)alert调用等等的任务被暂停,因此该任务中的代码不会继续,但允许其他任务运行.
这意味着
计时器可以获得回调
Ajax完成处理程序可以运行
等等.
从来没有JavaScript 在两个地方并发运行,但Firefox确实让线程运行其他任务,而任务被这些模态暂停.
这是一个Firefox的怪癖.我首先在Stack Overflow上了解它,感谢bobince.
为什么我说"可能"允许JavaScript线程运行:它曾经相当可靠(Firefox的旧版本).我没有任何麻烦,Firefox的42似乎令人不太可能复制它在Firefox 29或38,但它确实还是发生了.
我希望(虽然我可能错了)Mozilla会改变它以与其他浏览器保持一致,因为人们可能认为它违反了JavaScript的任务的运行完成语义,并且这些语义刚刚得到了加强和澄清.最新规格.