js是单线程的,但是浏览器是多线程的,js碰到异步任务,并没有自己处理,而是交给了浏览器的其他线程。
浏览器的线程包括:事件触发线程、定时器线程、http请求线程等
js异步任务常见的有:事件、定时器、网络请求等
任务队列:存放的是异步任务的回调函数
举个例子:
定时器
setTimeout(a函数,1000);
当js引擎执行到这一步的时候,就把这个定时器扔给浏览器的定时器线程,浏览器线程1s后将a函数插入到js任务队列的末尾,等待js引擎执行
事件
button.onclick = b函数;
js引擎将按钮事件交给浏览器的事件触发线程,当按钮点击事件触发时,事件触发线程将b函数插入到js任务队列的末尾,等待js引擎执行
网络请求
instance({
......
}).then(c函数)
js引擎将该网络请求任务交给浏览器的网络请求线程,网络请求线程会处理该任务,处理完之后,将网络请求的结果以及b函数插入到js任务队列。js引擎会将结果传入到b函数中并执行b函数
如有错误,还请批评指正。