hav*_*avz 6 javascript while-loop settimeout
我在这里阅读了w3schools和其他类似问题的相关页面,但似乎无法理解下面的内容有什么不对:
var myfunc03 = function (i) {
document.getElementById('d01').innerHTML += 100-i+"<br>";
};
var myFunc01 = function() {
i=0;
while (i<100) {
setTimeout(myfunc03(i), 1000)
i++;
}
};
Run Code Online (Sandbox Code Playgroud)
何时myFunc01();运行.
没有任何暂停,i的所有可能值都会立即列出.
这里有逻辑错误吗?
你可以通过递归更简单地做到这一点:
var i = 0;
function f1() { ... };
function f() {
f1();
i += 1;
setTimeout(function() {
if(i < 100) {
f();
}
}, 1000);
}
f();
Run Code Online (Sandbox Code Playgroud)
var i = 0;
var myfunc03 = function(i) {
document.getElementById('d01').innerHTML += 100 - i + "<br>";
};
var myFunc01 = function() {
myfunc03(i);
i += 1;
setTimeout(function() {
if (i < 100) {
myFunc01();
}
}, 1000);
}
myFunc01();Run Code Online (Sandbox Code Playgroud)
<div id="d01"></div>Run Code Online (Sandbox Code Playgroud)
function say(sentence) {
console.log(sentence);
}
function sayHello() {
say("Hello!");
}
var fn = sayHello;
var count = 10;
var ms = 1000;
function repeat(fn, count, ms) {
var i = 0;
function f() {
fn();
i += 1;
setTimeout(function() {
if (i < count) {
f();
}
}, ms);
}
f();
}
repeat(fn, count, ms);Run Code Online (Sandbox Code Playgroud)
该while循环不会等待setTimeout()完成.您需要为每个设置不同的时间延迟以使用不同的时间执行它们,并使用闭包来保持值i.同样在你的情况下,函数最初将被执行并且返回值被设置为参数setTimeout(),因此要么需要在匿名函数内调用函数,要么直接设置函数.
var myFunc01 = function() {
var i = 0;
while (i < 100) {
(function(i) {
setTimeout(function() {
document.getElementById('d01').innerHTML += 100 - i + "<br>";
}, 1000 * i)
})(i++)
}
};
myFunc01();Run Code Online (Sandbox Code Playgroud)
<span id="d01"></span>Run Code Online (Sandbox Code Playgroud)
setInterval()可以在这里使用
var myFunc01 = function() {
var i = 0;
// store the interval id to clear in future
var intr = setInterval(function() {
document.getElementById('d01').innerHTML += 100 - i + "<br>";
// clear the interval if `i` reached 100
if (++i == 100) clearInterval(intr);
}, 1000)
}
myFunc01();Run Code Online (Sandbox Code Playgroud)
<span id="d01"></span>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19416 次 |
| 最近记录: |