Published on

event-loop

task: 每次执行一条

animtion calbacks: 每次执行完 新增的会在下一帧执行

microtask: 每次执行完 新增的也会执行

通过 setTimeout,可以向消息队列中添加一个宏任务。当该宏任务被处理时,对应的 callback 会被 js 引擎处理。

常见的 macro task: setTimeoutMessageChannelpostMessage

micro task: MutationObseverPromise.then

单线程

Javascript 是单线程的,它就像是只有一个窗口的银行,客户不得不排队一个一个的等待办理。同理 JavaScript 的任务也要一个接一个的执行,如果某个任务(比如加载高清图片)是个耗时任务,为了防止主线程的阻塞,JavaScript 有了 同步异步 的概念。

异步完成了也需要在一旁等待,等到程序空闲下来才有时间去看哪些异步已经完成了,再去执行。

setTimeout(() => {
  console.log('setTimeout')
}, 1000)

for (let i = 0; i < 100000000; i += 1) {
  // todo
}