谁能解释一下为什么这段代码返回6 6 6 6 6而不是1 2 3 4 5



我试图理解闭包和全局作用域之间的区别,我遇到了这个。

for (var i=1; i<=5; i++) {
setTimeout(function(){
console.log("i: " + i);
},i*1000);
}

原因是你使用了settimeout和for循环直到你的timeout函数调用了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是一个关键字,它在全局范围内定义了一个变量,而不考虑块范围。

最新更新