我想用 JavaScript 显示一个正在进行的数字。
为此,我开发了以下示例:
for(var i=0; i<100; i++) {
window.setTimeout(function() {
alert(i);
},1000*i);
}
不幸的是,每次都显示数字 100。我想是因为i
是参考?
在参数传递中如何更改?
我想用 JavaScript 显示一个正在进行的数字。
为此,我开发了以下示例:
for(var i=0; i<100; i++) {
window.setTimeout(function() {
alert(i);
},1000*i);
}
不幸的是,每次都显示数字 100。我想是因为i
是参考?
在参数传递中如何更改?
问题是 JS 不会等待并在超时到期之前继续完成循环。到那时,i
已经是100了。
要解决此问题,您的超时应具有i
. 这样,它不会引用到i
那时已经 100 的 ,而是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));
}