运行此代码时
Promise.resolve(console.log('resolved'))
.then(pass => setTimeout((pass) => console.log(`1 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`2 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`3 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`4 then pass=${pass}`), 1000, pass))
.then(pass => console.log(`5 then pass=${pass}`))
.then(pass => console.log(`6 then pass=${pass}`))
您可以在控制台中找到它
resolved
5 then pass=4
6 then pass=undefined
1 then pass=undefined
2 then pass=1
3 then pass=2
4 then pass=3
所以问题是此传递变量在哪里获取其值?它在哪里存储为window.pass == undefined?为什么增加?当我们停止使用setTimeout时,为什么最终无法定义?
[setTimeout
返回一个TimerID,因此就是传递的值。
[1
和6
是返回console.log
的undefined
调用的结果。