javascript的setTimeout运行机制

console.log(1);
setTimeout(function() {
 console.log(2);

},0);
new Promise(function(resolve, reject) {
	console.log(3);
	for(let i = 1; i <= 100000; i++) {
				if(i === 100000) {
					resolve();					
				}
	}
	console.log(4);
});
setTimeout(function() {
			console.log(5);

}, 0)
console.log(6);

当javascript运行时遇到setTimeout后其实会另开一条线程(刚刚不是说javascript是单线程的嘛?)。是的,没错javascript是单线程的,但是setTimeout会另开一个线程,这个线程依赖于某个计时装置,这时,javascript其实是不管setTimeout而继续往下进行的,而setTimeout也是独立的线程计时的。而javascript在运行完全部的代码后会回过头来重新检测自己的队列中有没待执行的命令或者函数,如果有就执行,没有就等待。直到有待执行的命令被加载进这个队列中然后执行。在这期间,setTimeout依赖的那个计时线程如果时间到了,那么它会把setTimeout中要执行的函数或者命令传送到javascript的等待队列中,等待javascript执行完命令后回头来检测等待队列中未执行的函数或命令。

console.log(1);
		setTimeout(function() {
			console.log(2);

		},0);
		new Promise(function(resolve, reject) {
			console.log(3);
			for(let i = 1; i <= 100000; i++) {
				if(i === 100000) {
					resolve();
					setTimeout(function() {
						console.log(7);			
					}, 0)
				}
			}
			console.log(4);
		});
		setTimeout(function() {
			console.log(5);

		}, 0)
		console.log(6);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值