- Published on
event-loop
task: 每次执行一条
animtion calbacks: 每次执行完 新增的会在下一帧执行
microtask: 每次执行完 新增的也会执行
通过 setTimeout
,可以向消息队列中添加一个宏任务。当该宏任务被处理时,对应的 callback 会被 js 引擎处理。
常见的 macro task: setTimeout
、MessageChannel
、postMessage
micro task: MutationObsever
、 Promise.then
单线程
Javascript 是单线程的,它就像是只有一个窗口的银行,客户不得不排队一个一个的等待办理。同理 JavaScript 的任务也要一个接一个的执行,如果某个任务(比如加载高清图片)是个耗时任务,为了防止主线程的阻塞,JavaScript 有了 同步
和 异步
的概念。
异步完成了也需要在一旁等待,等到程序空闲下来才有时间去看哪些异步已经完成了,再去执行。
setTimeout(() => {
console.log('setTimeout')
}, 1000)
for (let i = 0; i < 100000000; i += 1) {
// todo
}