setInterval 多次打印

我写了一段代码,涉及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;

      }

}

})()

它给了我这样的结果,


10

9

9

9

9

and then after several 9s, 8 8 8.. and so on until 0.

然后出于好奇,我替换pgn += 1;为pgn+=10并且代码完全按照我想要的方式工作。它打印 10,然后在第二个 9 之后打印,依此类推。有人可以解释一下这是怎么发生的吗?


慕的地8271018
浏览 173回答 1
1回答

Cats萌萌

setInterval将在给定的毫秒数过去后重复调用函数。当你增加你的循环时,1你正在创建多个计时器而不是一个计时器,因此一旦所有计时器到期,它们就会在控制台中记录值但是当你增加 step by 时,你的10循环将只运行一次并且会有一个定时器。所有你需要的是:var count1 = 10;var myTimer =&nbsp; setInterval(function () {&nbsp; console.log(count1);&nbsp; count1 -= 1;&nbsp; if (count1 <= 0) {&nbsp; &nbsp; clearInterval(myTimer);&nbsp; }}, 1000);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript