首页 > 解决方案 > 有人可以解释为什么此代码返回 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);
}

标签: javascriptclosures

解决方案


尝试使用 let 而不是 var

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

let 和 var 之间的主要区别在于,使用 let 定义的变量的范围仅限于声明它的块,而使用 var 声明的变量具有全局范围。所以我们可以说 var 是一个关键字,它在全局范围内定义一个变量,而不考虑块范围。


推荐阅读