有人可以解释为什么这个代码 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 更像是一个关键字,它在全局范围内定义一个变量,而不管块范围。