为了账号安全,请及时绑定邮箱和手机立即绑定

setInterval 多次打印

setInterval 多次打印

慕的地8271018 2023-05-11 13:55:03
我写了一段代码,涉及if..elsea 中的语句,我的目标是在每次迭代 1 秒后for-loop执行该部分的内容。else例如,我正在打印 10 到 1。首先,10 将在 1s 9 之后打印,然后再打印 1s 8 将被打印,依此类推,直到它为 0。所以我的方法是这pgn很重要。(function () {var i, pgn = 0;for (i = 1; pgn < 10; i++) {    if (i === 1) {        console.log(10);        pgn++;    }    else {        (function countdown() {            var count1 = 9;            var myTimer = setInterval(function () {                console.log(count1);                count1 -= 1;                if (count1 <= 0) {                    clearInterval(myTimer);                }            }, 1000);         })()        pgn += 1;      }}})()它给了我这样的结果,109999and then after several 9s, 8 8 8.. and so on until 0.然后出于好奇,我替换pgn += 1;为pgn+=10并且代码完全按照我想要的方式工作。它打印 10,然后在第二个 9 之后打印,依此类推。有人可以解释一下这是怎么发生的吗?
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

setInterval将在给定的毫秒数过去后重复调用函数。当你增加你的循环时,1你正在创建多个计时器而不是一个计时器,因此一旦所有计时器到期,它们就会在控制台中记录值但是当你增加 step by 时,你的10循环将只运行一次并且会有一个定时器。


所有你需要的是:


var count1 = 10;

var myTimer =  setInterval(function () {

  console.log(count1);

  count1 -= 1;

  if (count1 <= 0) {

    clearInterval(myTimer);

  }

}, 1000);


查看完整回答
反对 回复 2023-05-11
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号