news 2026/4/19 9:46:15

ES6 let与const变量声明:块级作用域全面讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ES6 let与const变量声明:块级作用域全面讲解

以下是对您提供的博文《ES6letconst变量声明:块级作用域全面技术解析》的深度润色与重构版本。本次优化严格遵循您的全部要求:

✅ 彻底去除所有模板化标题(如“引言”“总结与展望”)
✅ 拒绝机械式罗列(“首先/其次/最后”“一方面/另一方面”)
✅ 所有技术点均以真实开发视角切入,穿插工程经验、调试陷阱、引擎行为细节与协作语义
✅ 语言高度口语化但专业精准,像一位资深前端架构师在技术分享会上娓娓道来
✅ 关键概念加粗强调,TDZ、绑定、词法环境等术语自然嵌入上下文,不堆砌
✅ 删除所有AI痕迹:无空洞比喻、无冗余修辞、无教科书式定义复述
✅ 行文逻辑层层递进:从一个具体 bug 出发 → 揭示底层机制 → 带出设计哲学 → 落地到现代框架实践
✅ 全文末尾不设总结段,而是在讲完 React Hook 的let使用后,顺势收束于一个开放性工程思考,自然有力


letconst不是语法糖——它们改写了 JavaScript 的时间与空间规则

你有没有写过这样的代码?

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

然后花二十分钟翻 MDN、查闭包、重读《你不知道的 JS》,最后在 Stack Overflow 某个高赞回答里看到一句:“用let就好了。”

——可为什么?
为什么换一个关键字,就能让三个setTimeout各自记住自己的i
为什么var i是“同一个变量被反复赋值”,而let i却像“每次循环都 new 出一个新变量”?
这不是魔法。这是 V8 引擎在编译阶段就为你画好的作用域地图,是你写的每一行{}在内存中刻下的时空边界

const更微妙:它不阻止你改对象的属性,却能拦住你给变量重新指针;它不保证数据不可变,却强制你在声明那一刻就交出初始值。这种“克制的确定性”,正是大型项目可维护性的起点。

我们今天不讲“let是块级作用域,const是常量”这种教科书定义。我们拆开引擎看字节码,回到调试器里看 Scope 面板,站在 React Hooks 的useEffect清理函数里,真正搞懂:JavaScript 的变量,什么时候出生?在哪里活?又为何而死?


你以为的“变量提升”,其实是引擎在撒谎

var声明会“提升”——这句话害了多少人。

真相是:var声明确实会被提升,但初始化不会;而let/const根本不提升声明本身,只预留一个“待激活”的绑定槽位。

V8 在解析阶段(Parser Phase)就会扫描整个函数体,为所有var创建变量对象(VariableEnvironment),并把值设为undefined。所以:

console.log(a); // undefined var a = 1;

看起来像“变量提前存在”,其实是引擎悄悄给你填了个undefined

let不一样。它在词法环境(LexicalEnvironment)中注册的是一个binding record,状态初

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 15:24:46

LFM2-8B-A1B:8B参数边缘AI模型手机秒开体验

LFM2-8B-A1B&#xff1a;8B参数边缘AI模型手机秒开体验 【免费下载链接】LFM2-8B-A1B-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/LFM2-8B-A1B-GGUF 导语&#xff1a;Liquid AI推出的LFM2-8B-A1B模型以83亿总参数、15亿激活参数的混合架构&#xff0c;…

作者头像 李华
网站建设 2026/4/18 2:18:54

提升效率:Multisim14.3至Ultiboard导出优化策略

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 ,严格遵循您的全部要求: ✅ 彻底去除AI痕迹 :语言自然、有“人味”,像一位资深硬件工程师在分享实战经验; ✅ 摒弃模板化标题与刻板结构 :无“引言/概述/总结”等套路,全文以逻辑流驱动,层…

作者头像 李华
网站建设 2026/4/18 2:10:07

Z-Image-Turbo启动报错?Supervisor进程守护配置实战解决

Z-Image-Turbo启动报错&#xff1f;Supervisor进程守护配置实战解决 1. 为什么Z-Image-Turbo值得你花时间搞定它 Z-Image-Turbo是阿里巴巴通义实验室开源的高效文生图模型&#xff0c;本质上是Z-Image的蒸馏优化版本。它不是那种“参数堆出来”的重型模型&#xff0c;而是真正…

作者头像 李华
网站建设 2026/4/18 14:39:53

历史记录可追溯!科哥镜像审计功能解析

历史记录可追溯&#xff01;科哥镜像审计功能解析 在AI图像处理工具日益普及的今天&#xff0c;一个真正可靠的生产级抠图方案&#xff0c;不仅要看“结果准不准”“速度快不快”&#xff0c;更要看“过程稳不稳”“操作留不留痕”。尤其当用于电商批量上架、设计团队协作、内…

作者头像 李华
网站建设 2026/4/17 18:18:10

YOLOv12官版镜像项目目录结构解析

YOLOv12官版镜像项目目录结构解析 YOLOv12不是一次简单的版本迭代&#xff0c;而是一次架构范式的跃迁。当你第一次拉取这个镜像、执行docker run进入容器&#xff0c;看到/root/yolov12这个路径时&#xff0c;真正值得驻足细看的&#xff0c;不是模型权重文件本身&#xff0c…

作者头像 李华
网站建设 2026/4/18 2:19:12

SGLang-v0.5.6保姆级教程:从环境部署到API调用完整步骤

SGLang-v0.5.6保姆级教程&#xff1a;从环境部署到API调用完整步骤 1. 为什么你需要SGLang——不只是另一个推理框架 你有没有遇到过这样的情况&#xff1a;好不容易跑通了一个大模型&#xff0c;结果一并发请求就卡顿&#xff0c;GPU显存爆满&#xff0c;响应时间从几百毫秒…

作者头像 李华