for(i=0;i<10;i++){
setTimeout(function(){
document.write(i);
},(i*1000));
}
这是我的代码,除了计数部分外,它都可以工作。它每秒写入 10。谁能告诉我为什么?
这是一个已知问题。当您像i
变化的值一样进行迭代时,在执行超时函数之前,您需要为每次执行复制i
值。
最简单的解决方案是将其传递给单独的方法,如下所示:
for(i=0;i<10;i++){
addToDocument(i);
}
function addToDocument(i){
setTimeout(function(){
document.write(i);
},(i*1000));
}
与java不同,javascript的问题在于它不会将i
视为最终的内部存储,这就是为什么你需要复制它的值。