js是单线程的,为什么可以处理异步任务?


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函数

如有错误,还请批评指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值