关于setTimeout跟setInterval以及event loop一个题目 - CNode技术社区

关于setTimeout跟setInterval以及event loop一个题目
发布于 9 年前 作者 oyosc 4368 次浏览 来自 问答
console.log('script start')
const interval = setInterval(function(){
 console.log('setInterval')
}, 0)
setTimeout(function(){
 console.log('setTimeout 1')
Promise.resolve().then(function(){
 console.log('promise 3')
}).then(function() {
 console.log('promise 4')
}).then(function() {
 setTimeout(function(){
 console.log('setTimeout 2')
 Promise.resolve().then(function() {
 console.log('promise 5')
}).then(function() {
 console.log('promise 6')
}).then(function() {
 clearInterval(interval)
 })
}, 0)
})
}, 0)
Promise.resolve().then(function() {
 console.log('promise 1')
}).then(function() {
 console.log('promise 2')
})

在试验的时候会生成untitled1.png,但是我在一个模拟器中会出现当输出setTimeout 1后会一直输出setInterval,而不会再往后面执行,求这个是什么原因,个人更倾向第二种结果

3 回复

macrotask 与 microtask的执行模式,今天刚好看到:翻到文章后面有

@ncuzp 我今天正好也看了,不过我在模拟器中会出现我后面说的情况,所以不知道是什么原因,传送门

@oyosc 首先是并不知道你提供的那个模拟器它的执行逻辑是什么,另外这里是在Node环境里执行的,那个模拟器实现这段代码的逻辑与Node环境应该是不一样, 不应该期待不同的环境能得到相同的结果!

回到顶部

AltStyle によって変換されたページ (->オリジナル) /