imgkit 不执行js_浏览器中js异步执行(任务队列)

相信大家都有听说js引擎是单线程执行,单线程执行也其实也就是指js执行过程中是从上到下一口气执行完的,线程是操作系统中的最小执行单元,单线程如何实现异步呢?其实再js中的异步必须要配合第三方的API来完成,这个过程是js通知第三方的API去完成一项任务,在这个过程中js继续执行下面的任务,等到第三方的API完成后会将js的回调函数放在浏览器维护的一个任务队列中,待js引擎处理完当前的执行栈后,会去获取任务队列中的执行任务继续压入执行栈去执行。这样是不是不太好理解,根据饥人谷若愚老师的比喻我稍微加了一些改编,我们可以把自己比作是js执行的主体,我们同一时间智能做一件事情

1.洗衣服 2.订外卖 3.拖地 4.扫地 5.喂猫

如果要完成以上的任务,我们肯定会先把衣服放进洗衣机,然后定时去洗,接着定了一个外卖,这时候衣服由洗衣机洗,外卖有商家在做,快递员配送,我们闲下来了就可以继续完成拖地、扫地、喂猫等任务了,等我们将以上任务都完成之后才能去看洗衣机洗完衣服了没,外卖到了没、如果洗衣机已经洗完了,外卖也放在门口了,我们就可以立即开始晾衣服的工作,然后去吃饭,如果还没有,我们就等着,外卖先来就先吃完,洗衣机先洗完就先晾衣服

在上面的过程中,洗衣服可以比作定时器,晾衣服是定时器中的回调,叫外卖可以比较ajax请求,吃饭是ajax请求的回调,在js开始执行的时候,调用洗衣服api,然后调用ajax api发送请求,这两件事就交给浏览器去做了,js这时候就接着处理后续的同步任务,如果浏览器在这个期间已经完成了洗衣服和拿到了外卖,就会把晾衣服和吃饭两个任务放在一个任务队列中排队,等js执行完前面的任务之后有空了才会查看任务队列,如果其中有任务的话再拿出来执行,这样类比一下是不是就比较好理解了呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值