TypeScript中的`let`、`const`、`var`区别:变量声明的规范与实践
TypeScript中的let
、const
、var
区别:变量声明的规范与实践
引言
在TypeScript中,变量声明是代码编写的基础部分。let
、const
、var
是三种用于变量声明的关键字,它们各自有不同的作用域规则和可变性特点。
基础知识
- 作用域:变量可以在整个文件(全局作用域)或某个特定代码块(局部作用域)内访问。
- 可变性:变量是否可以被重新赋值。
核心概念
let
:块级作用域,可重新赋值。const
:块级作用域,不可重新赋值,但可以修改其内部属性。var
:函数作用域或全局作用域,可重新赋值。
主要区别
在TypeScript中,let
、const
和var
是用于声明变量的关键字,它们在作用域和提升行为上有所不同。TypeScript遵循JavaScript的变量声明规则,但添加了类型系统。以下是let
、const
和var
三个关键字的主要区别:
-
var
声明:- 作用域:
var
声明的变量具有函数作用域或全局作用域,而不是块级作用域(例如,在if
语句或for
循环中使用var
声明的变量会在整个包含函数或全局中可见)。 - 提升:
var
声明的变量会发生变量提升,这意味着变量可以在声明之前使用,但初始化是在声明时进行的。 - 重赋值: 使用
var
声明的变量可以被重新赋值。
- 作用域:
-
let
声明:- 作用域:
let
声明的变量具有块级作用域,这意味着它们只在声明它们的块(例如if
语句、for
循环或任何其他大括号{}
内的代码块)中可见。 - 提升:
let
声明的变量不发生提升,它们不会被提升到块的顶部,所以在声明之前访问这些变量会导致ReferenceError
错误。 - 重赋值: 使用
let
声明的变量可以被重新赋值。
- 作用域:
-
const
声明:- 作用域: 与
let
相同,const
声明的变量具有块级作用域。 - 提升: 与
let
相同,const
声明的变量不发生提升,它们在块的顶部是不可访问的,直到声明语句被执行。 - 重赋值:
const
声明了一个只读的引用,这意味着你不能重新赋值给const
变量,但如果你将一个对象赋值给const
,你可以修改该对象的属性。
- 作用域: 与
示例:
function exampleFunction() {var varVariable = "var can be reassigned";varVariable = "new value"; // No error, var can be reassignedlet letVariable = "let can be reassigned";letVariable = "new value"; // No error, let can be reassignedconst constVariable = "const cannot be reassigned";// constVariable = "new value"; // Error, const cannot be reassignedconsole.log(varVariable); // "new value"console.log(letVariable); // "new value"console.log(constVariable); // "const cannot be reassigned"
}if (true) {var varInIf = "var is function-scoped";let letInIf = "let is block-scoped";const constInIf = "const is block-scoped";
}console.log(varInIf); // "var is function-scoped"
// console.log(letInIf); // ReferenceError: letInIf is not defined
// console.log(constInIf); // ReferenceError: constInIf is not defined
在TypeScript中,你还会使用这些关键字来声明具有特定类型的变量,例如:
let myNumber: number = 10;
const myString: string = "Hello World";
var myBoolean: boolean = true;
示例演示
-
let
示例:for (let i = 0; i < 5; i++) {// i 只在循环内有效 } // i 在这里不可用
-
const
示例:const person = { name: 'Bob' }; // person 不能重新赋值,但可以修改其属性 person.name = 'Alice';
-
var
示例:function example() {var x = 5; } example(); console.log(x); // x 在这里可用,因为它是全局作用域
实际应用
-
使用
let
和const
:function sum(a, b) {const result = a + b;return result; } // 使用 const 声明不可变的返回值变量
-
避免使用
var
:for (var i = 0; i < 5; i++) {// 使用 let 替代 var 以获得块级作用域 } // i 在这里不可用,因为使用 let 而不是 var
深入与最佳实践
- 优先使用
const
:除非需要重新赋值,否则应优先使用const
来声明变量。 - 使用
let
代替var
:避免使用var
,因为它可能导致意外的全局变量或难以追踪的作用域问题。
常见问题解答
-
Q: 我应该在什么情况下使用
let
而不是const
?
A: 当你需要在代码块内重新赋值给变量时,使用let
。 -
Q: 为什么应该避免使用
var
?
A:var
声明的变量具有函数作用域或全局作用域,可能导致作用域相关的问题,而let
和const
提供了更清晰的块级作用域。
结语
理解let
、const
、var
的区别对于编写清晰、可维护的TypeScript代码至关重要。合理选择变量声明关键字,可以帮助避免作用域相关的问题,并提高代码的可读性和可维护性。
学习资源
- TypeScript官方文档:Variables
互动环节
分享你在TypeScript中使用let
、const
、var
的经验,以及你如何决定使用哪一个。
相关文章:
TypeScript中的`let`、`const`、`var`区别:变量声明的规范与实践
TypeScript中的let、const、var区别:变量声明的规范与实践 引言 在TypeScript中,变量声明是代码编写的基础部分。let、const、var 是三种用于变量声明的关键字,它们各自有不同的作用域规则和可变性特点。 基础知识 作用域:变量…...

【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
Python限制输入的数范围
在Python中,我们可以使用多种方法来限制用户输入的数值范围。 1.使用while循环和try-except语句的方法 以下是一个使用while循环和try-except语句的示例,该示例将要求用户输入一个在指定范围内的整数。 假设我们要限制用户输入的数在1到100之间&#…...
postman都有哪些功能?
接口测试 可以方便地发送 HTTP 请求,包括各种方法(GET、POST、PUT、DELETE 等),并查看响应结果。 参数设置 能够灵活设置请求的参数,如查询参数、请求头、请求体等。 环境管理 支持创建不同的环境,方便…...

华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置
作者主页:点击! ENSP专栏:点击! 创作时间:2024年5月6日20点26分 💯趣站推荐💯 前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默,忍…...

ROS for LabVIEW:实现LabVIEW与ROS的无缝集成
ROS for LabVIEW是由Tufts大学开发的一套VI集合,旨在实现LabVIEW与ROS(Robot Operating System)的无缝集成。ROS是一个灵活的机器人软件框架,而LabVIEW则是一种强大的图形化编程工具。这个工具包的推出使得LabVIEW用户能够直接与R…...

yolov8+ROS+ubuntu18.04——学习记录
参考文献 1.Ubuntu配置Yolov8环境并训练自己的数据集 ROS实时运行 2.https://juejin.cn/post/7313979467965874214 前提: 1.CUDA和Anaconda,PyTorch 2.python>3.8 一、创建激活环境,安装依赖 1.创建虚拟环境 conda create -n yol…...
Java小抄(一)|Java中的List与Set转换
文章目录 List和Set的区别线程安全的区别相互转换List->SetSet->List List和Set的区别 在Java中,List和Set都是集合接口,它们之间有几个关键的区别: 重复元素: List允许重复元素,可以存储相同的元素多次。Set…...
【每日随笔】小人畏威不怀德 , 君子畏德不畏威 ( 先礼后兵 )
文章目录 一、小人畏威不怀德1、小人畏威不怀德2、小人场景一3、小人场景二 二、君子畏德不畏威三、先礼后兵 一、小人畏威不怀德 1、小人畏威不怀德 如果 友善 的对待 小人 , 这种人 认知低 且 素质差 , 小人 会将你的 " 友善 " 理解为 " 屈服 " , 他会认…...
不一样的2024
当我们继续往前走时,发现身边的事物不再那么的陌生,也不再那边多的阻碍,不管怎么,2024将会不一样。 当我们走进审批流时,全面石荒芜的,所以自己构建了一个体系。 当我们转向开源时,发现开源与…...
linux mv操作和cp操作
mv 和 cp 是 Linux 系统中用于移动和复制文件或文件夹的两个常用命令,它们之间的主要区别在于: mv(move):mv 命令用于移动文件或文件夹,将它们从一个位置移动到另一个位置。移动后,原始文件或文…...

第十二届蓝桥杯物联网试题(国赛)
不得不说国赛相比较省赛而言确实,功能变得更加复杂,更加繁琐,特别是串口LORA通信相结合的更加频繁,且对收取的字符处理要求要更加复杂,处理判别起来会更加复杂。 对于收发数据本身来说,收发的数据本身是以…...

小而美的前端库推荐
小而美,指的是“小即是美”的事物,这是马云在 2009年 APEC 中小企业峰会上首次提出的观点 👍 前端有很多小而美的库,接入成本很低又能满足日常开发需求 🎉...

【LeetCode】力扣第 399 场周赛 优质数对的总数 II
文章目录 1. 优质数对的总数 II 1. 优质数对的总数 II 题目链接 🍎该题涉及的小技巧:🐥 🐧①一次可以统计这个数的 两个因子 但是要注意 25 5 * 5,这种情况 5 只能统计一次噢🆒 解题思路: 🐧…...

YOLOv8+PyQt5面部表情检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)
1.资源包含可视化的面部表情检测系统,基于最新的YOLOv8训练的面部表情检测模型,和基于PyQt5制作的可视化面部表情检测系统,包含登陆页面、注册页面和检测页面,该系统可自动检测和识别图片或视频当中出现的八类面部表情:…...
ROS 工作空间
ROS 工作空间 工作空间概念 ROS 的工作空间 在 ROS 中,工作空间(通常称为 Catkin 工作空间)是一个文件夹(目录)结构,它用于组织、构建和管理 ROS 项目中的软件包。主要特点包括: 1. 目录结构…...
【科普】ChatGPT-4o 是什么?和之前的ChatGPT4.0有什么区别,各有什么优劣势
文章目录 前言一、ChatGPT-4o 是什么?**主要特点和改进**: 二、ChatGPT-4o 和之前的ChatGPT4.0有什么区别,各有什么优劣势区别优势和劣势ChatGPT-4.0ChatGPT-4o 前言 5月13日,ChatGPT-4o发布,是人工智能的进一步发展&…...

django-celery-beat自动调度异步任务
Celery是一个简单、灵活且可靠的分布式系统,专门用于处理大量消息的实时任务调度。它支持使用任务队列的方式在分布的机器、进程、线程上执行任务调度。Celery不仅支持异步任务(如发送邮件、文件上传、图像处理等耗时操作),还支持…...

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片
【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片 1.背景2.接口 1.背景 System.Drawing.Common 是一个用于图像处理和图形操作的库,它是 System.Drawing 命名空间的一部分。由于 .NET Core 和 .NET 5 的跨平台特性,许多以前内置于 .NET Framework…...

Bug:Linux用户拥有r权限但无法打开文件【Linux权限体系】
Bug:Linux用户拥有r权限但无法打开文件【Linux权限体系】 0 问题描述&解决 问题描述: 通过go编写了一个程序,产生的/var/log/xx日志文件发现普通用户无权限打开 - 查看文件权限发现该文件所有者、所有者组、其他用户均有r权限 - 查看该日…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...