当前位置: 首页 > backend >正文

ar / let / const 以及不同写法的区别一

1. let 在 for 里(常见)

for (let i = 0; i < 3; i++) { console.log('loop:', i); } console.log(i); // ❌ ReferenceError: i is not defined

原因let块级作用域i 只存在于 for 的大括号里。循环结束自动销毁。


2. var 在 for 里

for (var i = 0; i < 3; i++) { console.log('loop:', i); } console.log(i); // ✅ 3

原因var函数作用域,在函数外就是全局作用域,循环结束变量依旧存在。


3. 提前声明 let

let i; for (i = 0; i < 3; i++) { console.log('loop:', i); } console.log(i); // ✅ 3

原因i 在外层作用域声明,所以循环结束后还可以访问。


4. const 在 for 里(❌ 会报错)

for (const i = 0; i < 3; i++) { console.log(i); } // ❌ TypeError: Assignment to constant variable.

原因const 不能重新赋值,for 循环的迭代 i++ 会修改它,所以报错。


5. const 在 for...of 或 for...in 里(✅ 可用)

for (const item of [1, 2, 3]) { console.log(item); } console.log(item); // ❌ ReferenceError

原因:每一次循环 item 都是新的常量,允许重复声明,但只能在循环内部访问。


6. for 循环里的异步 + var(坑点)

for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 0); } // 输出:3 3 3

原因var 没有块级作用域,所有回调里的 i 共享一个变量,循环结束 i=3。


7. for 循环里的异步 + let(推荐)

for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 0); } // 输出:0 1 2

原因let 会为每次循环创建一个独立作用域,保存当前 i 的值。


8. for 循环里 let 结合解构

for (let [index, value] of ['a', 'b'].entries()) { console.log(index, value); } // 输出:0 'a' 1 'b'

原因let 可以在每次循环独立绑定多个变量。


💡 总结表

关键字作用域类型循环结束后能访问?异步闭包表现
var函数作用域✅ 能所有回调用同一个值
let块级作用域❌ 不能(除非外层声明)每次循环独立保存值
const块级作用域 + 常量❌ 不能(除非外层声明)每次循环新常量
http://www.xdnf.cn/news/17844.html

相关文章:

  • Vue 侦听器(watch 与 watchEffect)全解析2
  • [Chat-LangChain] 前端用户界面 | 核心交互组件 | 会话流管理
  • NY232NY236美光固态闪存NY240NY241
  • 责任链模式C++
  • 当云手机出现卡顿怎么办?
  • 第五天~提取Arxml中描述信息New_CanCluster--Expert
  • SpatialVLM和SpatialRGPT论文解读
  • 【进阶】Java技术栈八股文学习资料整理
  • Python 常用库速查手册
  • 如何使用亚马逊云科技EC2服务部署语音转写系统
  • 【算法专题训练】13、回文字符串
  • webrtc编译arm/arm64
  • STM32 - Embedded IDE - GCC - 显著减少固件的体积
  • 鸿蒙任务调度机制深度解析:优先级、时间片、多核与分布式的流畅秘密
  • 【开发语言】Groovy语言:Java生态中的动态力量
  • 【Cuda 编程思想】LinearQaunt-分块量化矩阵乘法计算过程
  • 从零到一:发布你的第一个 npm 开源库(2025 终极指南)
  • Shortest Routes II(Floyd最短路)
  • 数据结构初阶(15)排序算法—交换排序(快速排序)(动图演示)
  • Docker 缓存优化:通过 cpolar 内网穿透服务远程管理 Redis
  • C语言零基础第17讲:数据在内存中的存储
  • 新手向:Python函数定义与参数传递(位置参数、关键字参数、默认参数)
  • Redis 实用型限流与延时队列:从 Lua 固定/滑动窗口到 Streams 消费组(含脚本与压测)
  • 眺望电子RK3588_SDIO_WiFi_Support List更新
  • nodejs03-常用模块
  • LeetCode 53.最大子数组和:贪心算法下的连续子数组最优解
  • 【测试用例】
  • STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译
  • 肖臻《区块链技术与应用》第16讲 - 以太坊的“世界状态”:从哈希表到MPT架构演进
  • 安装openmmlab时出错