像“点击”这样的事件是宏任务吗?

问题描述

代码:

setTimeout(() => console.log(1),10);
for (let i = 0; i < 3e9; i++) {}
console.log(0);
window.onclick = () => console.log('click');

运行此脚本时:

  • 如果我在第 2 行的同步代码运行时不“单击”控制台显示预期结果:

    0
    1
    
  • 如果我在第 2 行的同步代码运行时“单击”控制台显示意外结果:

    0
    click
    1
    

所以我有两个问题:

  1. 如果 'click' 是一个宏任务,那么它应该在 setTimeout 后进入宏任务回调队列吗?这样当同步代码完成时,堆栈为空,宏任务回调队列将console.log(0)放入堆栈,堆栈执行它,然后回调队列将console.log('click')放入堆栈并堆栈执行。立>
  2. 如果我在第 2 行的同步代码运行时单击,为什么我会在控制台中看到“单击”?我在 executor 到达第 4 行之前点击了...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)