setTimeout提示导致默认值递增



只是在尝试JS。我发现了一些我无法理解的东西。

我有这样的代码:

prompt('title', setTimeout(() => {
return 'yes'
}, 1000));

当我第一次运行它时,它打印2。但是当我再次运行它时,它打印3。

但是这个计数器是什么,为什么它从2开始?价值观从何而来?为什么不返回yes?

当您调用setTimeout时,超时被给定一个timeoutID(稍后可以使用clearTimeout取消它)。每当产生新的超时时,这个timeoutID就会增加。当设置为prompt的默认值时,会将其字符串化(导致返回timeoutID)。

该值从2开始,因为您可能在运行prompt之前设置了超时。

示范:

const first = setTimeout(() => {}, 1).toString()
const second = setTimeout(() => {}, 1).toString()
console.log(first, second)

最新更新