浏览器线程执行顺序,了解一下

浏览器是多进程的,一个进程中包含多个线程。js线程和ui线程互斥。浏览器的线程还有浏览器事件触发线程、定时触发器线程、异步HTTP请求线程。


执行顺序    

js执行过程中,先执行中的代码,碰到DOM事件回调函数、异步http请求、setTimeout、setInterval放到事件队列里。等栈中的代码执行完,执行微任务队列里的回调函数。最后才执行队列里的代码。微任务和宏任务里的回调函数,都会拿到栈里去执行。

队列的放入顺序

异步http请求成功之后才会把回调函数放到队列里 。

setTimeout,setInterval到时间之后才会把函数放进队列里。

队列里的执行顺序

栈代码先进后出

function a(){
	let a=1;
	b(1);
	function b(n){
		let nu=n;
		c(nu);
		function c(n){
			console.log(n);
		}
	}
}
a();
c占用b,b占用a复制代码

DOM事件回调函数、异步http请求、setTimeout、setInterval、setImmediate(node)属于宏任务

(宏任务是先进先出)

console.log(1);
setTimeout(()=>{
	console.log(2);
},1000);
setTimeout(()=>{
	console.log(3);
},500);
//1,3,2复制代码

Promise.then VUE的 MessageChennel,MutationObserve属于微任务

(栈里面的代码执行完成,马上执行微任务(taskqueue)里面的函数)

js先执行栈里的代码、微任务、宏任务。如果宏任务中有微任务,马上执行微任务,再执行宏任务,再检查微任务,反复执行。

console.log(1);

setTimeout(()=>{
	console.log(2);
},1000);

console.log(4);

setTimeout(()=>{
	console.log(3);
	new Promise((resolve,reject)=>{
		resolve('我是promise.then的方法');
	}).then(data=>{
		console.log(data);
	},err=>{
	})
},500);

//1,4,3,我是promise.then的方法,2复制代码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值