异步原理分析:
- js的运行是单线程的(某一时刻,执行一行代码)
- 为了防止单线程阻塞的问题,引入了事件队列(任务队列)机制
- 什么样的任务才能进入事件队列?
Ajax的回调函数(服务器有数据返回时:readyState发生变化时触发)
定时函数(满足延时时间后触发,但是不一定触发)
事件处理函数(特定事件发生时触发)
- 任务队列中的任务何时触发?
主线程必须是空闲的
特定条件触发
JS主线程走完以后,会在任务队列里装入3个回调函数
JS主线程空闲以后,才会去调度任务队列里的函数触发
具体如何调度:
宏任务,微任务,相同定时器按照时间顺序来比较,先后顺序
每一次从任务队列里面取出来一个回调函数放到主线程里执行的这个过程就叫做事件循环
事件循环:当js主线程空闲,调度任务队列里的回调函数执行,每次调用一个,空闲,再调用一个,这个过程就叫做事件循环
事件循环解决的问题:js是单线程的,防止js被阻塞