我想用JavaScript显示正在进行的数字。
为此,我开发了以下示例:
for(var i=0; i<100; i++) {
window.setTimeout(function() {
alert(i);
},1000*i);
}
不幸的是,每次都会显示数字100。我认为这是因为i
是一个参考?
如何在参数传递中更改?
答案 0 :(得分:1)
问题是JS不会等待并在超时到期之前完成循环。到那时,i
已经是100。
要解决此问题,您的超时应具有i
的本地引用。这样,它就不会引用当时已经为100的i
,而是在循环的那个时间引用i
。
for(var i=0; i<100; i++) {
(function(i){
//shadowing the loop-i with the function-i
window.setTimeout(function() {
//thus, this callback is referencing the i from the function
//and not the loop's i
alert(i);
},1000*i);
}(i));
}