news 2026/9/8 9:26:20

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/9/7 21:51:16

3B轻量AI新体验!Granite-4.0多语言工具调用指南

3B轻量AI新体验&#xff01;Granite-4.0多语言工具调用指南 【免费下载链接】granite-4.0-h-micro-unsloth-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/granite-4.0-h-micro-unsloth-bnb-4bit 导语 IBM推出30亿参数的轻量级大模型Granite-4.0-H-M…

作者头像 李华
网站建设 2026/9/2 18:46:41

Open-AutoGLM如何提升成功率?操作重试机制部署方案

Open-AutoGLM如何提升成功率&#xff1f;操作重试机制部署方案 1. 什么是Open-AutoGLM&#xff1a;手机端AI Agent的轻量级落地框架 Open-AutoGLM 是智谱开源的一套面向移动端的 AI Agent 框架&#xff0c;专为在真实手机设备上运行而设计。它不是单纯把大模型“搬”到手机里…

作者头像 李华
网站建设 2026/9/2 18:01:01

Qwen-VL/Glyph/LLaVA三大模型对比:长上下文处理谁更强?

Qwen-VL/Glyph/LLaVA三大模型对比&#xff1a;长上下文处理谁更强&#xff1f; 在多模态大模型快速演进的今天&#xff0c;处理“长上下文”已不再是纯文本模型的专属课题——当一张高清截图里嵌着3000字说明书、一份PDF扫描件包含12页表格与图表、或一段带密集标注的工程图纸…

作者头像 李华
网站建设 2026/9/3 1:00:47

如何保存Qwen-Image-2512的工作流?实用技巧分享

如何保存Qwen-Image-2512的工作流&#xff1f;实用技巧分享 ComfyUI不是一次性玩具&#xff0c;而是一套可沉淀、可复用、可协作的AI图像生成操作系统。当你在Qwen-Image-2512-ComfyUI镜像里调通第一个工作流、生成第一张高质量图片时&#xff0c;真正的效率革命才刚刚开始——…

作者头像 李华
网站建设 2026/9/8 0:47:42

Gemma 3 270M:Unsloth量化本地AI文本生成新方案

Gemma 3 270M&#xff1a;Unsloth量化本地AI文本生成新方案 【免费下载链接】gemma-3-270m-it-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/gemma-3-270m-it-bnb-4bit 导语&#xff1a;Google DeepMind推出的轻量级模型Gemma 3 270M与Unsloth量化技…

作者头像 李华
网站建设 2026/9/2 23:31:24

GLM-4.6-FP8重磅进化:200K上下文+智能体效能飙升

GLM-4.6-FP8重磅进化&#xff1a;200K上下文智能体效能飙升 【免费下载链接】GLM-4.6-FP8 GLM-4.6-FP8在GLM-4.5基础上全面升级&#xff1a;上下文窗口扩展至200K tokens&#xff0c;支持更复杂智能体任务&#xff1b;编码性能显著提升&#xff0c;在Claude Code等场景生成更优…

作者头像 李华