我写了一段代码,涉及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);
添加回答
举报
0/150
提交
取消