在 JavaScript 中用 var, let, 以及 const 有什么差別?什么时候该用哪个?

文章目录

  • 在 JavaScript 中用 var, let, 以及 const 有什么差別?什么时候该用哪个?
    • 1.作用域不同
    • 2.声明上不同
    • 3.变量提升不同
    • 4.const 不允许重新赋值(rebind)
  • 延伸问题:什么时候该用 let ? 什么时候用 const

前置知识:

若不了解 JS 原生值和对象,可以看如下博客JavaScript有哪些数据类型?如何判断一个变量的数据类型?


在 JavaScript 中用 var, let, 以及 const 有什么差別?什么时候该用哪个?

var、let 和 const 是 JavaScript 中用于声明变量的关键字,在 JavaScript 早期只有var,直到 ES2015 (ES6) 时才加入了letconst

他们之间主要有 4 点不同

  • 作用域不同
  • 声明上不同
  • 变量提升上不同
  • const 不允许重新赋值

详细来说,

1.作用域不同

var可以是全局的,可以是以函数作为范围。 let 和 const则是以区块作为范围

2.声明上不同

var 可以反复的被重新声明 但是 let 和 const不行

3.变量提升不同

var 声明的变量会发生提升,在作用域创建阶段即被声明并初始化为 undefined,因此在赋值之前访问该变量不会报错,而是得到 undefined。 但是let和const声明的变量不会自动初始化,而是会进入到暂时死区(TDZ),在声明前使用会报错。

4.const 不允许重新赋值(rebind)

let 和 const 在绝大多数情况都是一样的,二者一个大区别在于,用原生值和对象正常来说是可以重新绑定的(重新绑定赋值),但是 const 不允许

接下来将会一一展开介绍:

1.作用域不同

在作用域上,var可以是全域、也可以是以函数作为范围,letconst則是以区块作为范围。当我們在一个文件的最外层使用var来宣告变量,这时它的范围就是全局,因此当我们在 console 中输入

var greeting = "hello"; window.greeting; // "hello"

其结果是 hello,但是用 let和 const 声明则不会有同样效果,var 除了在全局作用域,var 在某个函数中的范围就是该函数

2.声明上不同

var 可以重复声明

vargreeting="Hello! This ExplainThis :)";vargreeting="ExplainThis is a website that helps you learn programming!";

let 可以重新赋值(rebind),但是不能被重复声明

// 不行!不然会有 SyntaxError: Identifier 'greeting' has already been declaredletgreeting="Hello! This ExplainThis :)";letgreeting="ExplainThis is a website that helps you learn programming!";// 可以letgreeting="Hello! This ExplainThis :)";greeting="ExplainThis is a website that helps you learn programming!";

3.变量提升不同

var 变量提升, 自动初始化

console.log(greeting);// undefinedvargreeting="hi there";

但是letconst则不会,而是會進到暂时死区 (TDZ),因此在letconst声明变量前使用该变量,会出现错误:

console.log(greeting);// Uncaught ReferenceError: greeting is not definedletgreeting="hi there";

补充:

暂时性死区的地方,在这个区域里,任何对该变量的访问都会直接报错。只有当代码执行到声明该变量的那一行时,它才能被“激活”和访问。

4.const 不允许重新赋值(rebind)

const obj = { a: 1 } obj.a = 2 // ✅ 可以 obj.b = 3 // ✅ 可以 obj = { a: 100 } // 不可以,不能 rebind const string="hello world" string="hello js" //不可以,不能 rebind

let 是可以的,当然了 var 也可以

延伸问题:什么时候该用 let ? 什么时候用 const

没有一个标准答案,业界目前普遍的观点是多数时候使用 const,要重复赋值(rebind)的才用 let。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1199756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python 错题管理系统(源码+数据库+文档)

错题管理 目录 基于PythonDjango错题管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于PythonDjango错题管理系统 一、前言 博主介绍:✌️大厂码农…

专业农文旅景区策划运营管理提升机构,2026年新方案

开篇:行业现状与优选逻辑随着乡村振兴战略深入推进和文旅消费升级,农文旅景区正面临从资源依赖型向运营驱动型的转型关键期。据文化和旅游部2023年数据显示,全国农文旅项目年均增长率达12.8%,但运营三年以上的项目…

成型路径优化:最短加工时间与最小毛刺博弈

PCB成型是生产的最后一道关键工序,而成型路径优化则是工程师的必修课。这里面藏着一个核心矛盾:想要加工时间最短,就会牺牲毛刺控制效果;想要毛刺最小,又会增加加工时间。今天我们就来聊聊这个博弈的平衡点&#xff0c…

基于Python 深度学习酒店评论文本情感分析系统(源码+数据库+文档)

深度学习酒店评论文本情感分析 目录 基于PythonDjango深度学习酒店评论文本情感分析系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于PythonDjango深度学习酒店评…

爱信食品包装设计价格多少,设计费用贵不贵?

随着生活水平的提升,高血糖人群对健康食品的需求日益迫切,不少人在选择时都会问:有没有既适合控糖又营养均衡的食品?这就不得不提到专注荞麦食品领域二十年的天津港保税区爱信食品有限公司。爱信食品作为中日合资企…

2026年眼罩深度选型指南:如何为你的睡眠与护理场景匹配最佳方案?

一、引言:眼罩选择的核心困惑与分析框架 对于需要改善睡眠质量或缓解眼部疲劳的用户而言,市场上的眼罩产品形态多元从一次性蒸汽款到智能多功能款,从基础遮光到集光疗、按摩、香薰于一体的综合方案,常常难以快速判…

PCB拼板设计:这些方式你一定要知道

提到 PCB 拼板,很多工程师第一反应就是邮票孔拼板。不可否认,邮票孔拼板是最常用的方式,但它并不是万能的。不同的产品类型、生产规模和拆分方式,需要搭配不同的拼板设计。今天我们就来聊聊除了邮票孔之外的几种主流拼板方式&…

基于Python个人财务管理系统(源码+数据库+文档)

个人财务管理 目录 基于PythonDjango个人财务管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于PythonDjango个人财务管理系统 一、前言 博主介绍&#xff1a…

读懂《资治通鉴》中的历史规律

《资治通鉴》以“鉴于往事,有资于治道”为魂,司马光通过1362年兴亡治乱,提炼出超越时代的结构性规律。以下12条历史规律,严格依据《通鉴》文本(标注关键卷次),结合“臣光曰”史论,拒…

PCB成型毛刺:从根源控制告别烦恼

PCB 成型后边缘的毛刺,是工程师们最头疼的问题之一。毛刺不仅影响板子的美观,还可能导致短路、划伤元器件,甚至影响产品的可靠性。很多人遇到毛刺,第一反应是 “打磨处理”,但打磨不仅增加了工序成本,还可能…

基于Python农产品销售数据分析系统(源码+数据库+文档)

农产品销售数据分析 目录 基于PythonDjango农产品销售数据分析系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于PythonDjango农产品销售数据分析系统 一、前言 博…

生命密度的庖丁解牛

“生命密度” 不是抽象概念,而是 可量化、可操作、可迭代的生存质量指标。它衡量的是 单位时间内你活出的真实存在感、创造价值与情感连接的总和。对程序员而言,它是对抗“空心化忙碌”、重建人生意义的操作系统。 一、本质定义:什么是生命密…

整合单细胞与空间转录组学解析非小细胞肺癌免疫微环境异质性

一、摘要与引言 肺癌是全球范围内发病率位居第二且癌症相关死亡率最高的恶性肿瘤,其复杂的肿瘤生态系统涵盖多种免疫细胞类型。研究表明,骨髓来源细胞,尤其是巨噬细胞,在疾病进展过程中扮演关键角色。为进一步探究肺腺癌&#xf…

同城便民小程序源码系统,一站式解决生活服务所有需求

温馨提示:文末有资源获取方式 随着城市化进程加速和生活水平提高,人们对本地化信息服务的需求急剧增长。一款全新的同城便民信息小程序源码系统应运而生,以其全面覆盖的功能和用户友好的设计,成为市场热点。该系统旨在通过一站式解…

国产角接触球轴承厂家推荐 五大口碑实力产品靠谱的源头厂家 替代进口轴承的品质之选

在数控机床、加工中心、工业机器人、减速机、电主轴等高端装备领域,角接触球轴承长期被视为“核心基础件”,其性能稳定性直接关系到整机精度、寿命与运行可靠性。过去,这一领域对进口品牌依赖度较高,但随着国内轴承…

2026年灵活用工平台:全场景、技术力、合规性、服务与性价比排行榜

前言:2026年,企业如何选择能穿越周期的可靠伙伴? 根据《2026中国企业灵活用工白皮书》最新数据显示,国内灵活用工市场规模持续以超过20%的年复合增长率扩张,预计2026年渗透率将突破15%。市场蓬勃的背后,是企业用…

通过 Api 调用LLM 的 `temperature=0` 是可以吗

通过 Api 调用LLM 的 temperature=0 是可以吗 目录 通过 Api 调用LLM 的 `temperature=0` 是可以吗 1. 数学视角:为什么 T 趋近于 0 时,结果变成了“唯一解”? 2. 工程视角:代码是怎么处理“除以 0”的? 3. 什么时候应该用 0? 总结 结论: 设置 temperature=0 是完全可以…

Python Web 开发进阶实战:AI 编排引擎 —— 在 Flask + Vue 中构建低代码机器学习工作流平台

第一章:为什么需要 AI 编排引擎? 1.1 传统 ML 开发的痛点 阶段问题 实验阶段 | Notebook 无法版本控制,参数散落在 cell 中协作阶段 | 同事无法复现你的结果生产阶段 | 需将 notebook 重构成 Airflow DAG,重复劳动 1.2 编排引擎…

史上最全Linux系统镜像汇总,推荐收藏备用

【手机复制括号内整段内容,打开「夸克APP」即可获取。 动作淳琰霟霘天多好 /~51c43A9P3u~:/】

Claude Code 支持重磅扩展 Skills —— 用最新 API 构建更靠谱的 AI 项目

在上一篇《Claude Code 智谱 BigModel 实战集成指南》中,我们已经完成了一次完整的项目实战。项目可以正常运行,但在后续代码 Review 时,一个问题逐渐暴露出来:生成的代码虽然能跑,但大量 API 和用法已经过时&#xf…