Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、异步
(一)什么是异步
- 下图中的代码依次打印100、300、200(异步的情况)
- 执行第一行,打印100
- 执行setTimeout后,传入setTimeout的函数会被暂存起来,不会立即执行(单线程的特点)
- 执行最后一行,打印300
- 等所有程序执行完,处于空闲状态时,会立马看有没有暂存起来的要执行
- 发现暂存的setTimeout中的函数无需等待时间,就立即过来执行
- 下图中的代码依次打印100,弹出200,打印300(同步的情况)
(二)何时需要异步
- 在可能发生等待的情况需要异步
- 等待过程中不能像alert一样阻塞程序运行
- 因此,所有的“等待的情况”都需要异步
(三)前端使用异步的场景
- 定时任务:setTimeout,setInverval
- 网络请求:ajax请求,动态 < img >加载
- 事件绑定
二、面试题
(一)同步和异步的区别
- 同步会阻塞代码,二异步不会
- alert是同步,setTimeout是异步
(二)关于setTimeout的笔试题
- 会依次打印1,3,5,2,4
- 执行第一个
console.log(),打印1 - 执行第一个setTimeout后,传入setTimeout的函数被暂存起来
- 执行第二个
console.log(),打印3 - 执行第二个setTimeout后,传入setTimeout的函数被暂存起来
- 执行第三个
console.log(),打印5 - 此时所有程序执行完,处于空闲状态,会立马看有没有暂存起来的要执行
- 发现暂存的第一个setTimeout中的函数无需等待时间,就立即过来执行,打印2
- 发现暂存的第二个setTimeout中的函数需等待1s,等待结束后打印4
(三)前端使用异步的场景
- 具体见上文