guqzhou guqzhou
首页
快捷导航
下载站
  • Html 篇
  • Javascript 基础篇
  • 框架

    • Vue2
  • 前端文章

    • Css 篇
    • 微信开发
    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
    • JavaScript 基础
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试题库

    • HTML
    • CSS
    • jQuery
    • Vue
    • 零碎
  • 面试心得

    • 杂言碎语
  • 摘抄收录

    • ☆ 励志鸡汤
    • ❀ 人间烟火
    • ☣ 万物沦丧
    • ✌ 关掉烦恼
    • ✲ 小酒馆
  • 读书笔记

    • 《小狗钱钱》
    • 《穷爸爸富爸爸》
    • 《聪明人使用方格笔记本》
关于
  • 学习
  • 面试
  • 心情杂货
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue资源
  • 主站CDN
  • Vercel
  • Netlify
  • Github
GitHub

guqzhou

喜欢所以去追求!
首页
快捷导航
下载站
  • Html 篇
  • Javascript 基础篇
  • 框架

    • Vue2
  • 前端文章

    • Css 篇
    • 微信开发
    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
    • JavaScript 基础
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试题库

    • HTML
    • CSS
    • jQuery
    • Vue
    • 零碎
  • 面试心得

    • 杂言碎语
  • 摘抄收录

    • ☆ 励志鸡汤
    • ❀ 人间烟火
    • ☣ 万物沦丧
    • ✌ 关掉烦恼
    • ✲ 小酒馆
  • 读书笔记

    • 《小狗钱钱》
    • 《穷爸爸富爸爸》
    • 《聪明人使用方格笔记本》
关于
  • 学习
  • 面试
  • 心情杂货
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue资源
  • 主站CDN
  • Vercel
  • Netlify
  • Github
GitHub
  • vue2
  • CSS

  • Javascript基础

  • javascript进阶

    • 作用域&&结构&&箭头函数
    • ES6模块化
    • Promise
    • EventLoop
      • EventLoop
        • 同步和异步任务
    • 深拷贝和浅拷贝
  • typeScipt

  • vue2

  • vue3

  • react

  • vue实战

  • pinia的使用

  • gis

  • 前端文章

  • JavaScript文章

  • Vue文章

  • 小程序开发文章

  • uni-app

  • 学习笔记

  • TaroUI的使用

  • 工具使用

  • 前端
  • javascript进阶
guqzhou
2023-10-07
0

EventLoop

# EventLoop

javascript是单线程语言,同一时间只能做一件事情,单线程的语言就会出现程序假死的情景

# 同步和异步任务

为了防止耗时任务导致程序假死问题,js把待执行的任务分为同步和异步

# 同步任务

  • 非耗时任务,在主线程上排队执行的
  • 只有前一个任务执行完毕,才能执行后一个任务

# 异步任务

  • 又叫耗时任务,异步任务由javascript委托给宿主环境执行的
  • 当异步任务执行完后,会通知javascript主线程执行异步任务的回调函数

# 同步任务异步任务的执行过程

  • 同步任务是由js主线程按次序执行的
  • 继续往下执行发现这个任务是异步任务,把异步任务委托给宿主环境执行
  • 已完成的异步任务对应的回调函数,会被加入到任务队列中等待执行
  • javascript主线被清空后,会读取任务队列中的回调函数,次序执行

总结:js主线程会按照执行栈按顺序执行所有的任务,发现同步任务的时候js主线程自己执行它,发现它是一个异步任务就会委托给宿主环境去执行,js主线程就可以执行一些其他的非耗时任务,最后我们发现栈里面的任务都被执行完了以后,此时他会从任务队列里面按顺序把对应的回调函数取出来,然后再放到栈里面去执行

# 异步任务

# 宏任务
  • 异步的ajax请求
  • setTimeOut
  • 文件操作
  • 其他宏任务
# 微任务
  • promise.then()、catch()、finally()
  • process.nextTick()
  • 其它微任务 执行顺序:每一个宏任务执行完成以后,都会检查是否存在待执行的微任务,如果有,执行所有的微任务后,再继续执行下一个宏任务
console.log('1')
setTimeout(() => {
    new Promise((resolve) => {
        console.log(2)
        resolve()
    }).then(() => {
        console.log(3)
    })
})

new Promise((resolve) => {
    console.log(4)
    resolve()
}).then(() => {
    console.log(5)
})

setTimeout(() => {
    new Promise((resolve) => {
        console.log(6)
        resolve()
    }).then(() => {
        console.log(7)
    })
})

// 1 4 5 2 3 6 7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
上次更新: 2023/10/22, 16:10:00
Promise
深拷贝和浅拷贝

← Promise 深拷贝和浅拷贝 →

最近更新
01
面向对象
01-05
02
typescript用localStorage封装过期时间
01-05
03
npm、pnpm、yarn删除文件缓存
12-14
更多文章>
Theme by Vdoing | Copyright © 2021-2024 guqzhou | 萌ICP备20238188号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式