JS--EventLoop事件循环机制和练习题

62 阅读1分钟

JS是单线程运行的,所以其中大部分代码都是“同步”的(例如:循环。。。)

  • 所以在JS中千万不要写死循环、死递归。。。等操作,这些操作会一直占用JS引擎线程,导致后续其他的程序都无法执行
  • 但是JS中也有部分异步操作的代码
    • 【异步微任务】
      • requestAnimationFrame
      • Promise.then/catch/finally
      • async/await
      • queueMicrotask 手动创建一个异步的微任务
      • MutationObserver
      • IntersectionObserver
      • ...
    • [异步宏任务]
      • setTimeout/setInterval
      • 事件绑定/队列
      • XMLHttpRequest/Fetch
      • MessageChannel
      • ...

JS中的异步操作是:借用浏览器的多线程机制,再基于EventLoop事件循环机制,实现的单线程异步效果!!

setTimeout(() => {
    console.log(1);
}, 20);
定时器也不是立即执行,而是要等待5~7ms「浏览器最快处理时间」

image.png