为什么计数时钟不起作用?

时间:2017-01-24 08:34:42

标签: javascript for-loop settimeout

for(i=0;i<10;i++){
    setTimeout(function(){
        document.write(i);
    },(i*1000));
}

这是我的代码,它除计数部分外都有效。它写的每一秒10.谁能告诉我为什么?

1 个答案:

答案 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内部,这就是为什么你需要复制它的价值。