关于setTimeout跟setInterval以及event loop一个题目
发布于 8 年前 作者 oyosc 3989 次浏览 来自 问答
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环境应该是不一样, 不应该期待不同的环境能得到相同的结果!

回到顶部