Event Loop

  1. 执行全局script
    完毕调用栈Stack会清空
  2. microtask queue中取出位于队首的回调任务, 放入调用栈Stack中执行
    执行完后, 继续取出位于队首的任务,放入调用栈Stack中执行
    以此类推, 直到microtask queue中的所有任务都执行完毕
    microtask queue为空队列, 调用栈Stack也为空
  3. macrotask queue中取出位于队首的任务, 放入Stack中执行
    执行完毕后, 调用栈Stack为空
  4. 重复2-3
    重复2-3
    ...
宏队列

macrotask
一些异步任务的回调会依次进入macro task queue, 等待后续被调用
\color{red}{setTimeout}
\color{red}{setInterval}
I/O
...

微队列

一些异步任务的回调会依次进入micro task queue, 等待后续被调用
process.nextTick (Node独有)
\color{red}{Promise}
\color{red}{Object.observe}
...

console.log(1);

setTimeout(() => {
  console.log(2);
  Promise.resolve().then(() => {
    console.log(3)
  });
});

new Promise((resolve, reject) => {
  console.log(4)
  resolve(5)
}).then((data) => {
  console.log(data);
})

setTimeout(() => {
  console.log(6);
})

console.log(7);
// 1 4 7 5 2 3 6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种...
    CodeMT阅读 3,077评论 0 0
  • 我们都知道,javascript从诞生之日起就是一门单线程的非阻塞的脚本语言。单线程意味着,javascript代...
    小燕子小圆子阅读 4,046评论 0 4
  • 简介 我们都知道 JS 是一门单线程执行语言,单线程意味着每次只能处理一件事,意味着阻塞。JS 提供了很多异步代码...
    Schoilar阅读 1,833评论 0 0
  • 前言 Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种...
    六月繁花开阅读 3,280评论 0 3
  • [图片上传失败...(image-c3e3cb-1516440392143)] 一,js单线程存在的问题 js是单...
    奉献_97a8阅读 3,989评论 0 1