setInterval实现倒计时

用setInterval实现多个倒计时,代码如下:

//接口返回responseData,timeLeft是接口返回的剩余时间,是一个以秒为单位的整数
var groupOn = responseData.groupOn
for (let i = 0; i < 2; i++) {
    var timeLeft = groupOn[i].timeLeft
    setInterval(() => {
        timeLeft--
        console.log(timeLeft)
    }, 1000)
    // setInterval(function (timeLeft) {
    //     timeLeft--
    //     // console.log(timeLeft)
    // }, 1000, timeLeft)
}

我想要的效果是setInterval每秒打印两个timeLeft,比如两个timeLeft初始值分别为10和20,那么每秒打印一次,值递减,第一种写法打印的都是第二个timeLeft的值,第二种写法分别打印了两个timeLeft,但是值只递减了一次,应该怎么写才能实现我想要的效果?感觉是闭包的问题,但还是不知道怎么改写

阅读 2.4k
1 个回答

var groupOn = [{timeLeft: 10}, {timeLeft: 20}];
setInterval(function(){

for (let i = 0; i < groupOn.length; i++) {
    var timeLeft = groupOn[i].timeLeft--;
    console.log(timeLeft);
}

}, 1000)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题