目录
1. 事件循环介绍
1.1. 概念
- JavaScript有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事件以及执行队列中的子任务,这个模型与其它语言中的模型截然不同,比如C和Java
1.2. 为什么有事件循环?
- JavaScript 单线程(某一刻只能执行一行代码),为了让耗时代码不阻塞其他代码运行,设计了事件循环模型
1.3. 目的
- 掌握 JavaScript 是如何安排和运行代码的
2. 事件循环 - 执行过程
2.1. 事件循环定义
- 执行代码和收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制,就叫事件循环
2.2. JavaScript 内代码如何执行?
- 执行同步代码,遇到异步代码交给宿主浏览器环境执行
- 异步有了结果后,把回调函数放入任务队列排队
- 当调用栈空闲后,反复调用任务队列里的回调函数
2.3. 事件循环——练习
- 使用模型,分析代码执行过程
执行过程:1 5 3 2 4 点击一下document就会执行一次打印6
3. 宏任务与微任务
3.1. 前提
- ES6 之后引入了 Promise 对象, 让 JS 引擎也可以发起异步任务
3.2. 异步任务分类
- 宏任务:由浏览器环境执行的异步代码
- 微任务:由 JS 引擎环境执行的异步代码
Promise 本身是同步的,而then和catch回调函数是异步的
3.3. 宏任务与微任务 - 执行顺序
- 使用图解-分析代码执行顺序
执行过程:1 3 5 4 2
3.4. JavaScript 内代码如何执行?
- 执行第一个 script 脚本事件宏任务,里面同步代码
- 遇到 宏任务/微任务 交给宿主环境,有结果回调函数进入对应队列
- 当执行栈空闲时,清空微任务队列,再执行下一个宏任务,从1再来
4. 事件循环 - 经典面试题
- 回答打印顺序
执行过程:1 7 5 6 2 3 4