首页 > 试题广场 >

请表述以下代码的执行结果和原因:setTimeout(fun

[问答题]
请表述以下代码的执行结果和原因:
setTimeout(function){
console.log(1);
},0)
new Promise(function execulor(resolve){
    console.log(2)
for(var i = 0;i<10000;i+=1){
i ==9999 && resolve()
}
console.log(3)
}).then(function(){
console.log(4)
})
console.log(5)
1. setTimeout是定时器,属于宏任务,会在本轮宏任务结束之后的下一轮宏任务出现,现在进入宏任务队列等待
2. Promise执行,打印 2
3. i为9999时,执行resolve,promise的状态变为resolve,然后执行下一行代码,打印 3
4. promise得状态为resolved,所以then语句进入微任务队列中,在宏任务结束之前执行
5. 打印 5
6. 此时最后一行代码执行完毕,执行微任务,打印 4
7. 进入下一轮宏任务,打印 1

发表于 2020-06-03 00:15:10 回复(2)
23541
1.首先setTimeout是宏任务,将1放在宏任务队列中,等待执行
2.promise任务是同步任务,输出2,循环到9999执行resolve函数,由于promise.then方法是微任务,故将4放在微任务队列中
继续往下执行同步代码,输出5
3.同步代码执行完毕,进入微任务队列中执行所有的微任务,输出4
4.微任务队列清空完毕,从宏任务队列中取出一个宏任务进行执行,输出1
发表于 2022-03-19 22:47:19 回复(0)
setTimeout(function(){
	console.log(1)
},0);
new Promise(function(resolve,reject){
	console.log(2);
	for (var i = 0; i < 10000; i++) {
		i == 9999 && resolve()
	}
	console.log(3);
}).then(function(){
	console.log(4);
})
console.log(5)

不知道是否是写伪代码,不是的话出题也太不严谨了。语法错误,使用了中文“;”分号。
发表于 2020-12-24 15:47:04 回复(0)
1、script是宏任务,因此将SetTime宏任务放入队列
2、new Promise()里面是立即执行函数,进入此函数:
            打印2(同步代码)
            进入循环,执行resolve()
            打印3
3、遇到微任务then,放入微任务队列
4、打印5

开始处理本次执行的微任务队列:打印4,
执行宏任务:打印1
发表于 2023-03-17 11:54:24 回复(0)
5 2 4 1
发表于 2020-09-04 20:24:23 回复(1)