事件循环事件队列

事件循环事件队列:
程序执行时,先执行主程序
在执行过程中,如果发现有setTimeout,setInterval,xhr.send异步调入语句,就创建外部对象 setTimeout,setInterval对象,http调用对象
但因为是异步调用,所以暂不执行,只是创建对象而已。
什么时候执行:
定时器:当定时器等待时间结束,回调函数自己执行
xhr.onreadystatechange=function(){} 当响应结果回来时执行
这些异步回调函数执行时,都不能立刻进入主程序执行
都应该先进入js的任务队列/回调队列,等待召唤
假设主程序的东西执行完毕,事件循环会从js的任务队列中按顺序取出回调函数进入主程序执行,先进入队列的回调函数,先出队列,先执行
但promise的then不会进入异步对象中去创建
所有promise.then()中的回调函数,都会进入微任务中等待执行,(比回调函数更小的任务)
.then()中的函数都会比ajax,定时器提前执行
直接写在new promise中的代码属于主程序,立刻执行

	setTimeout(()=>console.log('a'),0);//定时器回调
	var p=new Promise(resolve=>{
		console.log('b');   //主程序立刻执行
		setTimeout(()=>console.log('f'),0) //定时器回调
		resolve()  //自动调用.then()中的代码
		p.then(()=>console.log('c')) //微任务 回调
		p.then(()=>console.log('d')) //微任务 回调
		console.log('e');      //主程序
		b e c d a f
	})
	但如果有process.nextTick()
	则nextTick()的优先级高于.then(),所以会比.then()提前执行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值