javascript - While 循环有 1 秒的中断
问题描述
我正在运行一个while循环,它在一个控制台行中一个接一个地打印循环的迭代次数。
<script>
var i = 0;
while (i < 10) {
console.log("The number is " + i);
i++;
}
</script>
但是,我想在每个console.log
输出之间引入 1 秒的暂停。我在互联网和 stackoverflow 上搜索了解决方案并遇到了setTimeout()
.
<script>
var i = 0;
while (i < 10) {
setTimeout(function (){console.log("The number is " + i)}, 1000);
i++;
}
</script>
但是,当我setTimeout()
在我的代码中引入时,不是将每个数字以 1 秒的间隔打印到单独的控制台行中,而是在一秒钟后打印数字 10。
解决方案
不是将每个数字之间有 1 秒的暂停打印到单独的控制台行中,而是在一秒钟后打印数字 10。
那是因为你正在分享i
,而不是等待你的setTimeout
您可以使用在块内定义块let
级变量while
var i = 0
while(i < 10) {
let scopeVariable = i
setTimeout(() => console.log(scopeVariable), i * 1000)
i++
}
您可以通过多种方式实现相同的目标
使用
for
循环for(let i = 0; i < 10; i++) { setTimeout(() => console.log(i), i * 1000) }
- 使用递归函数
function increaseNumber(start, end, cur = start, interval = 1000) {
if (cur === end) return
console.log(cur)
setTimeout(() => increaseNumber(start, end, cur + 1, interval), 1000)
}
increaseNumber(0, 10)
- 使用
setInterval
var i = 0
var handler = setInterval(() => {
if (i === 10) {
clearInterval(handler)
return
}
console.log(i)
i++
}, 1000)
推荐阅读
- pandas - 如何计算部分更新信息的均值、中位数和标准差?
- php - PostgreSQL 更新表的一行
- firebase - 使用 xamarin 表单从 Cloud Firestore 检索数据
- r - 将作为列表的 data.frame 转换为完整但字符的 data.frame
- python - 从 django 中的另一个模型更新模型的字段
- cloud-foundry - 无法连接到 hostcenter.com 上的 MySQL Swsscom 服务
- swift - replaceOccurrences 通过使用数组作为选项引发错误
- javascript - 为什么在 chrome 中建立 webrtc 连接需要两次报价?
- java - LibGDX Net.HttpRequest 获取请求不起作用
- node.js - 如何从 Nodejs 中的不同路径读取 json?