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