我想编写一个 for 循环,在每次迭代后以间隔打印数字 1 到 10 “像这样”
我怎样才能实现它?我尝试了 sleep() setInterval() setTimeout(") 和什么没有但似乎找不到任何可行的解决方案。如果可能的话,我想只使用纯 Javascript 来做到这一点。
function abc(){
for(i=1;i<=10;i++){
document.write(i+"<br>");
sleep(1000);
}
}
我想编写一个 for 循环,在每次迭代后以间隔打印数字 1 到 10 “像这样”
我怎样才能实现它?我尝试了 sleep() setInterval() setTimeout(") 和什么没有但似乎找不到任何可行的解决方案。如果可能的话,我想只使用纯 Javascript 来做到这一点。
function abc(){
for(i=1;i<=10;i++){
document.write(i+"<br>");
sleep(1000);
}
}
要回答这个问题,要获得类似睡眠功能的东西,您可以像这样写一些东西作为辅助功能
function sleep(dur) {
var d = new Date().getTime() + dur;
while(new Date().getTime() <= d ) {
//Do nothing
}
}
console.log(new Date().getTime())
sleep(1000)
console.log(new Date().getTime())
然后您可以sleep
在每次迭代后调用该函数,例如
function abc(){
for(i=1;i<=10;i++){
document.write(i+"<br>");
sleep(1000);
}
}
但是请注意,sleep
此时会冻结您的浏览器,而当您只想定期做某事时,您并不是真的不想这种行为
window.setInterval
在这种情况下会是你想要的
function abcd(i){
document.write(i + "<br>")
}
function repeatedTimeout(func,times,duration) {
var args = Array.prototype.slice.call(arguments).splice(3);
var i = 0;
args.push(i)
var wrap = function () {
if(args[args.length - 1] >= times)
window.clearInterval(wrap)
else {
func.apply(this,args)
args[args.length - 1]++
}
}
window.setInterval(wrap,duration)
}
repeatedTimeout(abcd,10,1000)
它将每 1000 毫秒调用 10 次,而不会冻结 Brower
这是JSBin
如果它真的必须是一个 for 循环,你可以做这样的事情,不管它对我有什么意义
for (var i = 0; i <= 10 ; i++) {
window.setTimeout(
(function (i){
return function() {
document.write(i + "<br>")
}
})(i),i * 1000)
}
在这种情况下,这是另一个JSBin
这将调用window.setTimeout
一个for
循环和多个超时i
作为超时,这会起作用,但我宁愿建议setInterval
像你在评论中发布的小提琴中所做的那样使用
由于浏览器中 JavaScript 的主要异步(和单线程)性质,诸如此类的构造sleep()
并不是可行的方法。
您可以编写一个通用函数,使用setTimeout()
它将执行循环,然后传入应该以 x 毫秒间隔运行的函数。至少你会有一个可重用的容器,你可以在其中运行你的代码。
function loopn(n, fn, delay)
{
if (n > 0) {
fn();
if (n > 1) {
setTimeout(function() {
loopn(n - 1, fn, delay);
}, delay);
}
}
}
loopn(10, function() {
console.log('hello there');
}, 1000);
您可以将循环解构为递归函数并用于setTimeout
实现暂停。
var i = 0;
var limit = 10;
function loop(){
console.log(i);
i++;
if(i < limit)
{
setTimeout(loop, 100);
}
}
loop();