有人可以解释为什么这个代码 returns 6 6 6 6 6 而不是 1 2 3 4 5
Can someone explain why this code returns 6 6 6 6 6 instead of 1 2 3 4 5
我试图了解闭包和全局范围之间的区别,我遇到了这个。
for (var i=1; i<=5; i++) {
setTimeout(function(){
console.log("i: " + i);
},i*1000);
}
原因是你使用 setTimout 和 for 循环直到你的超时函数调用循环被调用 6 次并且在 i 总是 6 打印你需要把你的循环放在 settimeout 中所以它会每秒调用一次
var i=1;
setTimeout(function(){
for (i=1;i<=5; i++) {
console.log("i: " , i);
}
},i*1000);
尝试使用 let 而不是 var
for (let i=1; i<=5; i++) {
setTimeout(function(){
console.log("i: " + i);
},i*1000);
}
let 和 var 之间的主要区别在于,用 let 定义的变量的范围仅限于声明它的块,而用 var 声明的变量具有全局范围。所以我们可以说 var 更像是一个关键字,它在全局范围内定义一个变量,而不管块范围。
我试图了解闭包和全局范围之间的区别,我遇到了这个。
for (var i=1; i<=5; i++) {
setTimeout(function(){
console.log("i: " + i);
},i*1000);
}
原因是你使用 setTimout 和 for 循环直到你的超时函数调用循环被调用 6 次并且在 i 总是 6 打印你需要把你的循环放在 settimeout 中所以它会每秒调用一次
var i=1;
setTimeout(function(){
for (i=1;i<=5; i++) {
console.log("i: " , i);
}
},i*1000);
尝试使用 let 而不是 var
for (let i=1; i<=5; i++) {
setTimeout(function(){
console.log("i: " + i);
},i*1000);
}
let 和 var 之间的主要区别在于,用 let 定义的变量的范围仅限于声明它的块,而用 var 声明的变量具有全局范围。所以我们可以说 var 更像是一个关键字,它在全局范围内定义一个变量,而不管块范围。