首页 > 解决方案 > 为什么即使主执行堆栈为空,事件队列中的函数也不会被调用?

问题描述

我正在阅读有关事件队列的文章。

并且作者说“事件队列中的函数在发现主执行堆栈为空之前不会执行

为了证明这一点,他提供了以下示例

function documentClickHandler() {
  console.log('CLICK!!!');
}

document.addEventListener('click', documentClickHandler);

function a() {
  const fiveSecondsLater = new Date().getTime() + 5000;
  while (new Date().getTime() < fiveSecondsLater) {}
}

a();
Click here!

因此,在这种情况下,documentClickHandler进入事件队列。并且在主执行堆栈为空documentClickHandler之前不会执行该函数。在这种情况下,直到函数完成它的工作,documentClickHandler才会被执行。正确的 !。a

但这并不像它缩进的那样工作......
我认为它甚至不听点击,这是由于 function 完成的繁重工作a

i)您能否提供任何其他解释相同的示例,该示例可以证明事件队列函数在执行堆栈为空之前不会执行?

ii) 为什么这个例子不起作用!我在函数a执行时单击了窗口,而 documentClickHandler 在函数a完成工作时甚至没有显示它工作!

标签: javascripteventqueue

解决方案


推荐阅读