这是我的代码.我想要它做的是写0,等待一秒,写1,等待一秒,写2,等待一秒等等.相反它写5 5 5 5 5
for(i = 0; i < 5; i++) {
setTimeout("document.write(i + ' ')", 1000);
}
Run Code Online (Sandbox Code Playgroud)
1)您将所有超时设置为同时持续1秒.循环不等待超时发生.所以你有5次超时都是同时执行的.
2)当超时执行时,循环很长,自完成后i变为5.所以一旦执行,它们都打印"5"
3)document.write()将somthing写入页面,在它执行的相同位置.即如果你有<script>document.write("xyz")</script>一段文字,它会在文本中间写上"xyz".但是,超时不一定在页面上的任何位置.它们仅存在于代码中.
这是一个尽可能接近你的解决方案:http://jsfiddle.net/rvbtU/1/
var container = document.getElementById("counter");
for(i = 0; i < 5; i++) {
setTimeout("container.innerHTML += '" + i + " ';", 1000 * i);
}
Run Code Online (Sandbox Code Playgroud)
但是,该解决方案使用setTimeout将字符串计算为javascript的能力,这绝不是一个好主意.
这是一个使用任何函数的解决方案:http://jsfiddle.net/YbPVX/1/
var container = document.getElementById("counter");
var writer = function(number) {
return function() { container.innerHTML += String(number) + " "; };
}
for(i = 0; i < 5; i++) {
setTimeout(writer(i), 1000 * i);
}
Run Code Online (Sandbox Code Playgroud)
编辑:忘了保存第二小提琴.哎呦.现在修复了.