我试图理解闭包和全局作用域之间的区别,我遇到了这个。
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是一个关键字,它在全局范围内定义了一个变量,而不考虑块范围。