JavaScript定时器函数中setInterval如何实现时间值递减?
关于这个JavaScript定时器中timer递减逻辑的解释
先看你贴的核心代码片段:
setInterval(function () { // 计算时分秒并格式化显示的逻辑... display.text(hours + ":" + minutes + ":" + seconds); if (--timer < 0) { timer = duration; } }, 1000);
这里的关键是**--timer是前置递减运算符**,它的执行逻辑是:先把timer的值减1,再返回减后的值用于条件判断。也就是说,不管if里的条件是否成立,timer的递减操作都会先完成。
举个具体的流程例子(假设初始duration是300,也就是5分钟):
- 第一次进入回调:先计算并显示
00:05:00,然后执行--timer,timer变成299,判断299 < 0不成立,不执行重置。 - 第二次进入回调:计算显示
00:04:59,--timer让timer变成298,条件依旧不成立... - 直到
timer变成0的时候:显示完00:00:00后,--timer把timer变成-1,此时-1 < 0条件成立,于是把timer重置为初始的300,接下来就会重新从5分钟开始计时,实现循环。
简单说,这个--timer写在if的条件里,但它本质上每次回调都会执行一次递减,条件判断只是用来决定是否要把timer重置回初始值而已。
内容的提问来源于stack exchange,提问作者Sajwal Tamrakar
相关产品推荐
相关产品推荐

