event-loop 事件轮循

例1

setTimeout(()=> console.log(3), 100)
setTimeout(()=> console.log(2))
consold.log(1)

废话不多我们直入主题。首先 consold.log(1) 会直接输出因为是同步函数,之后会把setTimeout(()=> console.log(2))放入异步队列,之后是setTimeout(()=> console.log(3), 100)放入异步队列(因为有100毫秒的延迟,所以不在setTimeout(()=> console.log(2))前面),然后事件轮询机制会去异步队列里找有没有需要执行的函数,如果有就会放入主进程执行输出一直如此询环直到没有函数可以执行位置,最后输出是 1 2 3

例2

$.ajax({
	url: 'http://xxxxx',
	succes: () => {
		console.log('4)
	} 
})
setTimeout(()=> console.log(3), 500)
setTimeout(()=> console.log(2))
consold.log(1)

这里多了一个ajax其实就是一个障眼法说白了ajax也是异步代码,还是会放入异步队列里等待处理,但要注意的是这样可能会有不确定性,比如ajax特别快的情况下会优先于setTimeout(()=> console.log(3), 500)输出,正常输出是 1 2 3 4 ajax过快的情况下会变成1 2 4 3

总结

  1. 事件轮询:js实现异步的具体解决方案
  2. 同步代码直接执行比如上列代码中的 consold.log(1)
  3. 异步函数先放在异步队列中
  4. 待同步代码执行完毕后会轮询执行异步队列中的函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值