for (i = 0; i < 100; i++) {
setTimeout(function() {
console.log(i);
}, 500)
}
在上面的代码中,它只会打印 100。我知道原因。但是我如何将当前的 i 值发送到回调中setTimeout
?
for (i = 0; i < 100; i++) {
setTimeout(function() {
console.log(i);
}, 500)
}
在上面的代码中,它只会打印 100。我知道原因。但是我如何将当前的 i 值发送到回调中setTimeout
?
在循环中使用匿名函数来创建闭包:
for (i = 0; i < 100; i++) {
(function(i){
window.setTimeout(function() {
console.log(i);
}, 500)
})(i);
}
当您在调用时将值传递给函数时,该值将被复制,并且函数的每个实例都将拥有自己的副本,当循环计数器更改时不会更改。
for (i=0;i<100;i++){
setTimeout(function(i){
console.log(i);
},500, i)
}
这有效:
for (var i = 0; i < 100; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 500);
})(i);
}
for (i = 0; i < 100; i++) {
setTimeout((function(i) {
return function(){
console.log(i);
}
})(i), 500)
}