for循环中的let与var的说明
2024-10-09 18:19:19
参考资料:《JavaScript高级程序设计》
在 let 出现之前,for 循环定义的迭代变量会渗透到循环体外部:
for (var i = 0; i < 5; ++i) {
// 循环逻辑
}
console.log(i); // 5
改成使用 let 之后,这个问题就消失了,因为迭代变量的作用域仅限于 for 循环块内部:
for (let i = 0; i < 5; ++i) {
// 循环逻辑
}
console.log(i); // ReferenceError: i 没有定义
在使用 var 的时候,最常见的问题就是对迭代变量的奇特声明和修改:
for (var i = 0; i < 5; ++i) {
setTimeout(() => console.log(i), 0)
}
// 你可能以为会输出 0、1、2、3、4
// 实际上会输出 5、5、5、5、5
之所以会这样,是因为在退出循环时,迭代变量保存的是导致循环退出的值:5。
在之后执行超时逻辑时,所有的 i 都是同一个变量,因而输出的都是同一个最终值。
而在使用 let 声明迭代变量时,JavaScript 引擎在后台会为每个迭代循环声明一个新的迭代变量。
每个 setTimeout 引用的都是不同的变量实例,所以 console.log 输出的是我们期望的值,也就是循
环执行过程中每个迭代变量的值。
for (let i = 0; i < 5; ++i) {
setTimeout(() => console.log(i), 0)
}
// 会输出 0、1、2、3、4
这种每次迭代声明一个独立变量实例的行为适用于所有风格的 for 循环,包括 for-in 和 for-of
循环。
最新文章
- C# 匿名对象随笔
- map的四种遍历方式
- HDU 5690:2016";百度之星"; - 初赛 All X
- 实验五 含有控制信号的计数器VHDL设计
- Sqlserver日期函数应用
- discuz特殊主题插件开发步骤和犯的愚蠢错误
- 为设计师准备的 20 个新的免费 PSD 模板
- hql语句理解2
- Java Language and Virtual Machine Specifications
- django admin site配置(二)
- html5有什么布局标签
- ZeroBraneStudio之支持GBK文件编码
- sublime text3 插件配置
- acdream暴力专场中的优美暴力
- (转)ubuntu下如何查看软件安装目录以及安装版本
- 新浪云计算SAE部署代码过程
- MySQL巧用自定义函数进行查询优化
- mantisbt的配置与安装
- Linux~上部署.net MVC出现的问题与解决
- ORACLE数据库自动备份压缩的批处理脚本 rar 7z
热门文章
- 微服务分布式电商项目学习笔记(三)---- docker介绍安装以及使用docker安装软件(2020/7/10)
- 剑指offer-二叉树
- 决策树减支问题(优化)dfs减支问题
- MarkDown系列教程
- MATLAB中conv2的详细用法 (以及【matlab知识补充】conv2、filter2、imfilter函数原理)
- 6个LED的控制
- Pycharm开发环境配置与调试
- go 虎牙爬取
- nginx安全: 配置http基本验证(Basic Auth)(nginx 1.18.0)
- Geoserver发布shp文件