Javascript 为什么计数正确递增
考虑这个简单的例子:Javascript 为什么计数正确递增,javascript,Javascript,考虑这个简单的例子: var count = 0; for (var i = 0; i < 4; i++ ) { setTimeout(function() { console.log(i, count++); }, i * 200); } 我猜I总是解析为4,因为setTimeout回调在变量I上关闭,但我不明白为什么count的值不为真 var计数=0; 对于(变量i=0;i
var count = 0;
for (var i = 0; i < 4; i++ ) {
setTimeout(function() {
console.log(i, count++);
}, i * 200);
}
我猜I
总是解析为4,因为setTimeout回调在变量I上关闭,但我不明白为什么count
的值不为真
var计数=0;
对于(变量i=0;i<4;i++){
setTimeout(函数(){
log(i,count++);
},i*2000);
}
变量i
由for
循环递增,并在任何超时处理程序运行之前以值4
结束。另一方面,变量count
仅在超时处理程序中递增。当第一个超时处理程序启动时,count
仍将是0
正如前面的小伙子所说,这是因为循环在超时激活之前完成
解决这个问题的一种方法是将超时放在另一个函数中,并从循环中向它传递i
。这确保了对于每次迭代,函数都会传递正确的i
这也是count
设置为预期值的原因;它位于循环的范围之外
for (var i = 0; i < 4; i++) {
doSomething(i);
};
function doSomething(i) {
setTimeout(function() {
console.log(i);
}, i * 2000);
};
for(变量i=0;i<4;i++){
剂量测定法(i);
};
功能剂量测定(一){
setTimeout(函数(){
控制台日志(i);
},i*2000);
};
for (var i = 0; i < 4; i++) {
doSomething(i);
};
function doSomething(i) {
setTimeout(function() {
console.log(i);
}, i * 2000);
};