前端八股: var、let、const 的区别
在 JavaScript 中var、let、const都可以声明变量但它们在作用域、变量提升、重复声明、修改值等方面有明显区别。先看一个总表特性varletconst作用域函数作用域块级作用域块级作用域变量提升有可提前访问值是undefined有但存在 TDZ有但存在 TDZ重复声明可以不可以不可以重新赋值可以可以不可以声明时必须赋值不需要不需要必须一、作用域区别var函数作用域var没有真正的块级作用域。if (true) { var a 10 } console.log(a) // 10虽然a写在{}里面但外面依然可以访问。因为var主要受函数作用域限制而不是普通代码块。比如function test() { var a 10 } console.log(a) // 报错这里a只能在test函数内部使用。let 和 const块级作用域let和const都存在块级作用域。if (true) { let a 10 const b 20 } console.log(a) // 报错 console.log(b) // 报错这里的{ }就形成了一个作用域。所以let和const只在当前代码块中有效。二、什么是变量提升JavaScript 在执行代码之前会先处理变量和函数声明。这种现象通常叫变量提升 Hoisting例如console.log(a) var a 10不会报错而是输出undefined可以粗略理解成var a console.log(a) a 10所以var声明会被提升并且初始化为undefined。三、let 和 const 也有变量提升吗有。但是不能在声明之前访问。例如console.log(a) let a 10会直接报错ReferenceErrorconst也是一样console.log(a) const a 10同样报错。所以更准确地说let和const也会被提升但是在真正执行到声明语句之前不能访问。这段区域就叫TDZ暂时性死区 Temporal Dead Zone四、什么是 TDZ例如{ console.log(a) let a 10 }从进入这个作用域开始到执行let a 10之前这一段区域就是a的暂时性死区。可以理解成进入作用域 ↓ TDZ 开始 ↓ console.log(a) // 不能访问 ↓ let a 10 ↓ TDZ 结束 ↓ 之后可以正常使用 a所以不是let完全没有变量提升。而是提升了但在初始化之前不能访问。const同样如此。五、重复声明的区别var可以重复声明var a 10 var a 20 console.log(a) // 20但是let不可以let a 10 let a 20会报错。const也不可以const a 10 const a 20同样报错。所以var → 可以重复声明 let → 不可以 const → 不可以这也是现在更推荐使用let和const的原因之一可以减少变量重复声明带来的问题。六、重新赋值的区别var可以重新赋值var a 10 a 20let也可以let a 10 a 20但是const a 10 a 20会报错。因为const声明以后不能重新给这个变量赋另一个值。七、const 真的完全不能修改吗这是最容易误解的地方。例如const obj { name: Tom } obj.name Jack这是允许的。甚至obj.age 18也是允许的。但是obj {}不允许。为什么因为const限制的是变量本身保存的引用不能改变。不是对象里面的内容完全不能修改。可以这样理解const obj { name: Tom }变量obj保存的是一个对象的引用obj ↓ 对象 { name: Tom }你修改obj.name Jack只是修改对象内部内容。引用没有变化obj ↓ 还是原来的对象所以允许。但如果obj {}相当于obj ↓ 换成另一个对象引用发生变化所以报错。八、const 声明时为什么必须赋值下面这样不行const a因为const创建后不能重新赋值。如果声明的时候不给值后面就没办法再赋值了。所以必须const a 10而let可以let a a 10九、为什么现在不推荐使用 var主要因为var有几个容易产生问题的地方。比如没有块级作用域for (var i 0; i 3; i) { } console.log(i) // 3i跑到了循环外面。而for (let i 0; i 3; i) { } console.log(i) // 报错let的i只存在于循环作用域中。另外var还能重复声明var name Tom var name Jack有时候可能不小心覆盖前面的变量。所以现代 JavaScript 基本推荐优先 const ↓ 需要重新赋值时用 let ↓ 尽量不用 var十、let 和 const 怎么选择可以记一个非常实用的原则默认使用 const需要重新赋值时再改成 let。比如const user { name: Tom }对象本身不会换掉用const如果let count 0 count因为count会变化所以用let十一、面试最容易问的几个点1. var 和 let 最大区别是什么可以答var是函数作用域let是块级作用域var可以重复声明并且声明提升后值为undefined而let存在暂时性死区声明前不能访问。2. let 有变量提升吗有。只是提升后没有立即初始化声明前处于 TDZ所以不能访问。3. const 对象为什么还能修改因为const限制的是变量绑定也就是引用地址不能重新赋值不限制对象内部属性修改。例如const obj {} obj.a 1 // 可以 obj {} // 不可以总结var、let、const最核心的区别可以压缩成var → 函数作用域 → 可以重复声明 → 可以重新赋值 → 声明提升后是 undefinedlet → 块级作用域 → 不能重复声明 → 可以重新赋值 → 存在 TDZconst → 块级作用域 → 不能重复声明 → 不能重新赋值 → 存在 TDZ → 声明时必须赋值最后记住两个最重要的点let/const都有变量提升只是存在 TDZ。以及const不是“值完全不能变”而是“变量不能重新指向另一个值”。实际开发中建议默认 const 需要重新赋值 → let 尽量不用 var

相关新闻

Steam秋季促销倒计时,RTX50系高刷游戏本盘点:50系同价位选购指南

Steam秋季促销倒计时,RTX50系高刷游戏本盘点:50系同价位选购指南

一、活动背景Steam秋季促销从10月2日凌晨1点持续到10月9日凌晨1点,正好覆盖整个国庆假期期间3A开放世界、FPS竞技、RPG冒险等全品类基本都会触达年度史低,部分热门大作折扣力度甚至超过夏促二、五款推荐机型1.华硕天选7Pro酷睿版配置:酷睿Ult…

2026/10/7 15:31:47 阅读更多 →
《创业之路》-1017-细读商业经典 - 长期主义的内涵

《创业之路》-1017-细读商业经典 - 长期主义的内涵

长期主义是商业世界被谈论最多,也被误解最多的概念之一。很多人把它等同于 “坚持”“熬时间”“十年磨一剑”,但翻遍《基业长青》《德鲁克论管理》以及贝佐斯的股东信就会发现:长期主义从来不是意志层面的 “死磕”,而是一套穿越…

2026/10/7 15:31:47 阅读更多 →
PyTorch LSTM影评情感分类:NLP工程闭环实战指南

PyTorch LSTM影评情感分类:NLP工程闭环实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 15:31:47 阅读更多 →

最新新闻

淋巴细胞目标检测实战:从标注格式转换到YOLO训练避坑指南

淋巴细胞目标检测实战:从标注格式转换到YOLO训练避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 16:01:28 阅读更多 →
树莓派计算模块CM4与CM5全SKU对比与选型指南

树莓派计算模块CM4与CM5全SKU对比与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 16:01:27 阅读更多 →
SystemC与TLM2.0的ESL性能建模实战:从架构评估到GEM5联合仿真

SystemC与TLM2.0的ESL性能建模实战:从架构评估到GEM5联合仿真

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 16:01:27 阅读更多 →
Altium Designer PCB开窗挖槽:阻焊开窗与机械层铣槽槽孔

Altium Designer PCB开窗挖槽:阻焊开窗与机械层铣槽槽孔

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 16:01:27 阅读更多 →
SMB版本差异与Windows局域网共享故障排查指南

SMB版本差异与Windows局域网共享故障排查指南

简介:smb.rar_SMB 是一份以经典《超级玛丽》(Super Mario Bros)为蓝本的 2D 平台游戏源码工程,面向刚接触游戏编程的 C 语言学习者和爱好者,演示了从窗口创建、资源加载到游戏逻辑更新的完整流程。压缩包内共 33 个文件…

2026/10/7 16:01:27 阅读更多 →
PDN阻抗优化与芯片供电仿真:Sigrity+ADS双工具实战指南

PDN阻抗优化与芯片供电仿真:Sigrity+ADS双工具实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 16:00:27 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:12 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:13 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:12 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →