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权限 - 查看该日…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
