当在内部使用setTimeout时,Promises传递给该值什么,为什么它增加?

问题描述 投票:0回答:1

运行此代码时

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时,为什么最终无法定义?

javascript promise settimeout
1个回答
1
投票

[setTimeout返回一个TimerID,因此就是传递的值。

[16是返回console.logundefined调用的结果。

© www.soinside.com 2019 - 2024. All rights reserved.