Firefox:JavaScript运行时没有单击事件

Firefox:JavaScript运行时没有单击事件,javascript,asynchronous,events,event-handling,Javascript,Asynchronous,Events,Event Handling,这是我的html文件: <!DOCTYPE html> <html> <head></head> <body> <script> function wait() { // I know this is obsolete var ms = 3000 + new Date().getTime(); while(ms > new Date()) {} console.log("3 Se

这是我的html文件:

<!DOCTYPE html>
<html>
<head></head>
<body>
  <script>
  function wait() {
    // I know this is obsolete
    var ms = 3000 + new Date().getTime();
    while(ms > new Date()) {}
    console.log("3 Seconds Are Over");
  }

  function clickHandler() {
    console.log("Click");
  }

  document.addEventListener("click", clickHandler);

  wait();
  console.log("End Global Execution Context");
  </script>
</body>
</html>

函数wait(){
//我知道这已经过时了
var ms=3000+新日期().getTime();
while(ms>newdate()){}
console.log(“3秒结束”);
}
函数clickHandler(){
控制台日志(“单击”);
}
document.addEventListener(“单击”,clickHandler);
等待();
log(“结束全局执行上下文”);
由于
EventHandler
是在JavaScript等待3秒钟之前注册的,因此它应该在最后记录
“Click”
,即使我在这3秒钟内单击


但是,当我在
之后单击时,它只记录
“Click”
,显然我的安装已损坏。新安装修复了该问题。

显然,我的安装已损坏。新安装修复了该问题。

JS默认为单线程。根据您运行此程序的上下文,您可以使用web workers或子进程之类的东西来并行化此程序。对不起,我误读了。是的,事件应该放在队列上,然后在循环后激发;这正是我从你的代码中得到的。如果你在前3秒内点击时没有得到“点击”(3秒后),请注意你正在测试的浏览器,因为我无法复制你的发现?@Amadan我在debianI上使用Firefox ESR 45.4.0,但没有这些功能;因此,为了明确起见,我所说的(操作系统X上的Chrome)-无论何时单击“输出”窗口,它都会记录“单击”(延迟除外,如果单击发生在加载的前3秒钟内,或单击“运行”)。它应该在最后记录“单击”您认为这是为什么?事件调度是异步的,它不能保证在执行某个语句或另一个语句之间准确传递。默认情况下,JS是单线程的。根据您运行此程序的上下文,您可以使用web workers或子进程之类的东西来并行化此程序。对不起,我误读了。是的,事件应该放在队列上,然后在循环后激发;这正是我从你的代码中得到的。如果你在前3秒内点击时没有得到“点击”(3秒后),请注意你正在测试的浏览器,因为我无法复制你的发现?@Amadan我在debianI上使用Firefox ESR 45.4.0,但没有这些功能;因此,为了明确起见,我所说的(操作系统X上的Chrome)-无论何时单击“输出”窗口,它都会记录“单击”(延迟除外,如果单击发生在加载的前3秒钟内,或单击“运行”)。它应该在最后记录“单击”您认为这是为什么?事件分派是异步的,它不能保证在执行某个语句或另一个语句之间准确地传递。