javascript - 有人可以解释为什么此代码返回 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);
}
解决方案
尝试使用 let 而不是 var
for (let i=1; i<=5; i++) {
setTimeout(function(){
console.log("i: " + i);
},i*1000);
}
let 和 var 之间的主要区别在于,使用 let 定义的变量的范围仅限于声明它的块,而使用 var 声明的变量具有全局范围。所以我们可以说 var 是一个关键字,它在全局范围内定义一个变量,而不考虑块范围。
推荐阅读
- javascript - 如何使用纯 JavaScript 将图像上传到节点服务器端点?
- c# - 如何在不剪切单词的情况下逐字母将单词实例化到网格
- c++ - 在 Eigen 中复制模板化函数参数
- python - 如何使用在同一网络上的 PC 上运行的另一个 Python 脚本在 RPi 上执行一段代码或 Python 脚本?
- javascript - 从 html 文件中的 js 文件更新变量
- c# - 遍历嵌套列表
- c# - 如果不手动运行 commit 命令,则无法查看数据库中的更改
- java - graphQL api 请求突然停止工作
- kubernetes - 如何向 kubelet 添加标志
- javascript - 如何将数据目标用于不同的组件?