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代码至关重要。

相关新闻

最新新闻

K8S taint(污点)和tolerations(污点容忍)

K8S taint(污点)和tolerations(污点容忍)

文章目录 一、Taint(污点) `1.1概念` `1.2设置污点` 取消污点 二、tolerations(污点容忍) `2.1概念` `2.2示例` 三、Node 和 Pod 对于污点与容忍基本概念 参考资料 一、Taint(污点) 1.1概念 节点亲和性是 Pod 的一种属性,它使 Pod 被吸引到一类特定的节点 。 这可能出…

2026/9/5 15:00:04
技术博客如何选题?从JWT鉴权到SQL批量更新提炼实战方向

技术博客如何选题?从JWT鉴权到SQL批量更新提炼实战方向

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

2026/9/5 14:44:56
PanDownload解析度盘没速度?2026网络环境优化与提速教程

PanDownload解析度盘没速度?2026网络环境优化与提速教程

网络存储已经成为现代人存放照片、办公文档以及各类影音资料的核心工具,但许多人在使用主流网盘下载文件时,常常会遇到原本百兆宽带却只能跑出几十KB每秒的尴尬状况。这种速率上的巨大落差不仅耽误时间,也让日常的资料传输变得异常煎熬。为了…

2026/9/5 14:24:55
AI大模型与数学|第68天 课程主题:逆矩阵、可逆判定、求逆公式

AI大模型与数学|第68天 课程主题:逆矩阵、可逆判定、求逆公式

一、学习目标1. 搞懂逆矩阵到底是什么物理/计算含义,联系大模型矩阵运算场景2. 记住矩阵可逆的全部判定条件3. 掌握2阶矩阵求逆公式、伴随矩阵法求逆4. 分清:什么时候逆矩阵存在,什么时候不存在(奇异矩阵)1. 什么是逆矩…

2026/9/5 13:44:53
MATLAB实现InSAR时序分析:从SBAS/PS算法原理到工程实践全解析

MATLAB实现InSAR时序分析:从SBAS/PS算法原理到工程实践全解析

简介:本资源是一套面向遥感科学、地质工程与GIS分析人员的InSAR时序形变分析实战教程,聚焦MATLAB平台实现合成孔径雷达干涉测量的全流程处理,解决地质灾害监测、城市沉降评估等场景中地表微小形变的高精度反演难题。压缩包共8个文件&#xff…

2026/9/5 11:49:46
AI编程工作流实操指南:从工具选型到自动化开发流水线

AI编程工作流实操指南:从工具选型到自动化开发流水线

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

2026/9/5 11:49:46