JS中var、let和const的区别详解 在JavaScript中变量声明是编程的基础。ES6ES2015引入了let和const关键字为变量声明带来了新的特性和更严格的规则。本文将对比var、let和const的核心区别。一、var、let和const的基本区别1. 作用域Scopevar - 函数作用域var声明的变量具有函数作用域function scope。functionexample(){if(true){varx10;}console.log(x);// 输出: 10在if块外部仍然可以访问}let/const - 块级作用域let和const声明的变量具有块级作用域block scope。if(true){lety20;constz30;}console.log(y);// ReferenceError: y is not definedconsole.log(z);// ReferenceError: z is not defined2. 变量提升Hoistingvar - 会提升初始化为undefinedconsole.log(a);// 输出: undefinedvara5;let/const - 会提升但存在暂时性死区console.log(b);// ReferenceError: Cannot access b before initializationletb10;3. 重复声明var - 允许重复声明varx10;varx20;// 允许let/const - 不允许重复声明lety10;lety20;// SyntaxError: Identifier y has already been declared4. 全局对象属性var - 会成为全局对象的属性varglobalVarglobal;console.log(window.globalVar);// 输出: global浏览器环境let/const - 不会成为全局对象的属性letglobalLetglobal;console.log(window.globalLet);// 输出: undefined二、let和const的额外区别1. 重新赋值let - 允许重新赋值letcounter0;counter1;// 允许const - 不允许重新赋值constPI3.14159;PI3.14;// TypeError: Assignment to constant variable2. 初始化要求let - 可以不初始化letvalue;// 允许value100;const - 必须初始化constvalue;// SyntaxError: Missing initializer in const declaration3. const与对象/数组const声明的对象或数组可以修改内容但不能重新赋值。constperson{name:Alice};person.age25;// 允许修改属性constnumbers[1,2,3];numbers.push(4);// 允许修改数组// person {}; // TypeError: Assignment to constant variable三、使用场景建议优先使用const- 当变量的值不需要改变时其次使用let- 当变量的值需要改变时避免使用var- 除非在维护旧代码四、关键示例示例1循环中的变量// var的问题for(vari0;i3;i){setTimeout(()console.log(i));// 全部输出: 3}// let的正确行为for(letj0;j3;j){setTimeout(()console.log(j));// 输出: 0, 1, 2}示例2const对象操作conststudent{name:张三,score:85};student.score90;// 允许// student {}; // 不允许总结特性varletconst作用域函数作用域块级作用域块级作用域变量提升是初始化为undefined是存在TDZ是存在TDZ重复声明允许不允许不允许全局对象属性是否否重新赋值允许允许不允许必须初始化否否是最佳实践默认使用const需要重新赋值时使用let避免使用var掌握这些区别对于编写健壮的JavaScript代码至关重要。

相关新闻

最新新闻

上海市工程技术研究中心认定对企业有什么好处?如何申报

上海市工程技术研究中心认定对企业有什么好处?如何申报

一、上海市工程技术研究中心认定好处获得认定不仅是荣誉,更直接关联到“真金白银”的补贴和项目申报优势:1.直接资金奖励(各区差异大)市级认定:各区配套奖励力度不同。例如浦东新区最高资助100万元(按上年度…

2026/7/9 3:16:19
Hive卸数至HBase:Spark反而比MapReduce慢?

Hive卸数至HBase:Spark反而比MapReduce慢?

一、引言在大数据批处理场景下,我们的常规认知是:Spark凭借内存计算、DAG调度等优势在性能上全面优于MapReduce;但在我们的实际测试中发现:在Hive批量卸数到HBase的场景下,MapReduce(BulkLoad)的…

2026/7/9 3:16:19
Docker+Linux+VS Code远程开发工作流实战指南

Docker+Linux+VS Code远程开发工作流实战指南

1. 为什么“Docker Linux 服务器 VS Code 远程开发”不是三件套,而是一条完整工作流很多人第一次看到这个组合,下意识把它拆成三个独立名词:Docker 是容器工具,Linux 是操作系统,VS Code 是编辑器。于是学的时候东一…

2026/7/9 3:16:19
DC-DC Buck电路CCM/DCM模式仿真:Multisim中负载从10Ω到100Ω的4种状态切换

DC-DC Buck电路CCM/DCM模式仿真:Multisim中负载从10Ω到100Ω的4种状态切换

DC-DC Buck电路CCM/DCM模式仿真:Multisim中负载从10Ω到100Ω的4种状态切换 在开关电源设计中,理解降压型DC-DC转换器(Buck电路)的工作模式至关重要。本文将深入探讨连续导通模式(CCM)与断续导通模式&#…

2026/7/9 3:16:19
AnythingLLM 与 Ollama 集成:3种本地LLM模型性能与成本对比评测

AnythingLLM 与 Ollama 集成:3种本地LLM模型性能与成本对比评测

AnythingLLM 与 Ollama 集成:3款主流开源模型实战评测与选型指南在本地部署大语言模型(LLM)已成为企业构建私有知识库的热门选择。作为一款开源的文档聊天机器人框架,AnythingLLM 凭借其灵活的架构和易用性备受开发者青睐。而 Oll…

2026/7/9 3:16:19
2026工业级4G智能网关选型指南:从轻量采集到全栈边缘计算的产品矩阵与实战解析

2026工业级4G智能网关选型指南:从轻量采集到全栈边缘计算的产品矩阵与实战解析

出品机构: 工业物联网产业研究院(IIoT-RI)・边缘计算与协议转换评测组 执笔人: 林工(资深系统架构师 / IIoT-RI 跨域通讯研究员) 所属系列: IIoT-RI 2026 工业网关选型蓝皮书・第二卷&#xff0…

2026/7/9 3:11:19

月新闻