当在 then 内部使用 setTimeout 时,Promises 将什么值传递给 then 以及为什么它会递增?

What value is passed by Promises to then when setTimeout is used inside then and why it increment?

当你运行这个代码

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 return 是一个 TimerID,因此这是传递的值。

16console.log 调用的结果 return undefined.