setTimeout()的问题

Ran*_*lue 1 javascript

这是我的代码.我想要它做的是写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)

http://jsfiddle.net/Xb7Eb/

Fla*_*ino 8

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)

编辑:忘了保存第二小提琴.哎呦.现在修复了.