当前位置: 首页 > news >正文

在 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.jsqmd.com/news/283658/

相关文章:

  • 专业农文旅景区策划运营管理提升机构,2026年新方案
  • 爱信食品包装设计价格多少,设计费用贵不贵?
  • 基于Python 深度学习酒店评论文本情感分析系统(源码+数据库+文档)
  • 2026年眼罩深度选型指南:如何为你的睡眠与护理场景匹配最佳方案?
  • 基于Python个人财务管理系统(源码+数据库+文档)
  • PCB拼板设计:这些方式你一定要知道
  • 读懂《资治通鉴》中的历史规律
  • PCB成型毛刺:从根源控制告别烦恼
  • 基于Python农产品销售数据分析系统(源码+数据库+文档)
  • 整合单细胞与空间转录组学解析非小细胞肺癌免疫微环境异质性
  • 同城便民小程序源码系统,一站式解决生活服务所有需求
  • 国产角接触球轴承厂家推荐 五大口碑实力产品靠谱的源头厂家 替代进口轴承的品质之选
  • 2026年灵活用工平台:全场景、技术力、合规性、服务与性价比排行榜
  • Python Web 开发进阶实战:AI 编排引擎 —— 在 Flask + Vue 中构建低代码机器学习工作流平台
  • 史上最全Linux系统镜像汇总,推荐收藏备用
  • Claude Code 支持重磅扩展 Skills —— 用最新 API 构建更靠谱的 AI 项目
  • SpringData JPA 都能写 SQL,为啥还要用 MyBatis?
  • P1629邮递员送信(双数组,易失误)
  • 课本教不会的生存真相:那些值钱的核心能力,从来都藏在“额外付出”里
  • 2026年灵活用工平台:基于技术、合规、服务、性价比四大核心维度
  • Transformer 21问全解析:一文读懂核心原理
  • 基于单片机的血压计设计(有完整资料)
  • 基于Dify的RAG知识库搭建,大模型入门到精通,收藏这篇就足够了!
  • 基于单片机的音乐播放器的设计(有完整资料)
  • 2026 年你必须了解的 10 大开源 AI Agent 框架
  • 打破传统桎梏,LLM 让智能运维实现从 “自动化” 到 “自进化”
  • Java 接入 AI 大模型:从踩坑到高效落地
  • 基于yolo13-C3k2-DBB的铝罐识别与分类平台
  • 2026年GIS开发十大趋势
  • 全面覆盖!同城便民信息小程序源码系统,功能强大