最近在跑项目的时候遇到了一个现象:多个计数器分次调用执行的时候,有一个计数器总是不生效,不执行!代码也没有任何错误,就随手打印了计数器,竟然发现了setinterval/setTimeout返回值的秘密!
JS计数器setinterval/setTimeout的返回值是数字?-Qui-Note


控制台打印的竟然是数字,是数字!!!

我的天啊,不敢相信的的我,新建了一个页面,专门测试JS计数器setinterval/setTimeout返回值

<button id="btn">stop</button>
<script type="text/javascript">
let a = setInterval(()=>{
   console.log(456)
},20)
let b = setInterval(()=>{
   console.log(789)
},20)
let btn = document.getElementById("btn")
btn.onclick = function(){
   console.log(a,b) // 结果1,2
   clearInterval(a)
   clearInterval(b)
}
</script>

打印出来是1和2,果然还是数字。然后去了菜鸟教程和w3c关于setTimeout()和setInterval() 有这样一个“技术细节”(https://www.runoob.com/jsref/met-win-settimeout.html)

返回值:返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 和clearInterval()来取消执行。

怪不得,原因是 返回计数器的编号id,我们可以通过这个id将计数器暂停!!!也就是下面这样:

clearTimeout(1)
clearInterval(2)

喔!原来是这样的,这次就记住了,计数器是返回的是一个编号id,可以通过计数器暂停!另外要注意的是,计数器被清楚后再次调用会生成一个新的“编号id”,旧id数字被删除了,不存在!