JavaScript let 和 const 功能 用法运用 详解

news/2025/3/10 21:02:24/文章来源:https://www.cnblogs.com/baisemoshui/p/18763658

JavaScript 中的 letconst 是用于声明变量的关键字,它们在 ES6(ECMAScript 2015)中被引入,以提供更灵活的变量作用域控制和更安全的变量声明方式。以下是对 letconst 的详细解析,包括它们的功能、用法及运用示例。

let

功能

  1. 块级作用域let 声明的变量只在声明它们的代码块(由大括号 {} 包围)内有效,这有助于避免变量污染和意外的变量覆盖。
  2. 不允许重复声明:在同一作用域内,不能重复声明同一个 let 变量,这有助于避免拼写错误或不小心覆盖变量。
  3. 暂时性死区(Temporal Dead Zone, TDZ):在 let 变量被声明之前,它处于 TDZ,访问它会抛出 ReferenceError。这强制开发者在声明变量后再使用它,提高了代码的安全性。

用法

{let a = 10;console.log(a); // 输出 10
}
console.log(a); // 报错:ReferenceError: a is not defined

在上面的例子中,变量 a 只在它声明的代码块内有效,在外部访问会报错。

let x = 10;
let x = 20; // 报错:SyntaxError: Identifier 'x' has already been declared

在同一作用域内重复声明 let 变量会导致语法错误。

console.log(y); // 报错:ReferenceError: Cannot access 'y' before initialization
let y = 10;

let 变量声明之前访问它会导致 ReferenceError

运用示例

for (let i = 0; i < 5; i++) {setTimeout(() => console.log(i), 0);
}
// 输出: 0, 1, 2, 3, 4

在这个例子中,let 声明的循环变量 i 只在循环体内有效,每次迭代都会创建一个新的 i,避免了使用 var 时所有迭代共享同一个 i 的问题。

const

功能

  1. 块级作用域:与 let 相同,const 声明的变量也只在声明它们的代码块内有效。
  2. 不可重新赋值const 声明的变量一旦赋值后,就不能再被重新赋值。这有助于保护常量值不被意外修改。
  3. 必须初始化const 声明的变量必须在声明时立即初始化,不能留到后续代码中赋值。

用法

const PI = 3.14159;
console.log(PI); // 输出 3.14159
PI = 3.14; // 报错:TypeError: Assignment to constant variable.

在上面的例子中,const 声明的常量 PI 不能被重新赋值。

const obj = { key: 'value' };
obj.key = 'new value'; // 允许,因为修改的是对象的属性,不是重新赋值
const arr = [1, 2, 3];
arr.push(4); // 允许,因为修改的是数组的元素,不是重新赋值

const 声明的对象或数组本身不能被重新赋值,但它们的属性或元素可以被修改。

const x; // 报错:SyntaxError: Missing initializer in const declaration

const 声明的变量必须在声明时立即初始化。

运用示例

const config = {apiUrl: 'https://api.example.com',timeout: 5000
};function fetchData() {console.log(config.apiUrl);// 使用 config 对象进行 API 请求
}

在这个例子中,const 用于声明一个配置对象 config,它的值在程序运行期间不会被意外修改,从而保证了配置的稳定性。

总结

  • let 适用于需要块级作用域且可能重新赋值的变量。
  • const 适用于不需要重新赋值的常量,如配置对象、数学常数等。

使用 letconst 可以提高代码的可读性、安全性和可维护性,是现代 JavaScript 编程中推荐使用的变量声明方式。

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

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

相关文章

【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享

问题描述 当在AKS中遇见复杂的网络问题,想要进入到特定的POD中来抓取网络文件包进行分析。特分享抓取网络包的方法!操作步骤 第一步:使用kubectl get pods命令确认问题Pod所在的Node 第二步:使用node shell登录到相应node上 kubectl node-shell <node name> 第三步:…

App虚拟机环境搭建

App虚拟机环境搭建 在uniapp的开发环境中,我想要搭建一个平台完成对于app的开发,所以要配置app的基本环境和安装虚拟机 虚拟机安装 这里使用Mumu虚拟机.直接从官网下载然后傻瓜式安装https://mumu.163.com/搭建环境 主要是给虚拟机的接口和abd.exe文件的地址找到,配置到HBuilde…

nodejs的下载安装

首先进入官网https://nodejs.cn/download/ 左边是稳定版,右边是最新版,安装自己想要的版本 安装到自己想要的路径下 一直next,这步不要勾选 然后install 在安装路径下创建两个文件夹,分别是node_cache和node_global 配置环境变量 再在系统path中添加%NODE_HOME%、%NODE_HOM…

安卓虚拟机的创建

在android studio上创建一个安卓虚拟机 可以选择手机型号 可选的都是谷歌的手机 而且对应的ui都是原生安卓ui 随便选就好 记得安卓版本不要太老,没必要虚拟机运行起来之后就会在边上有个视图

android studio的下载

进入android studio官网下载即可,中间所有东西点同意和next就行

Vue3--ref - reactive

reactive可以深层次对比ref定义对象类型是借用reactive总结

征程 6 工具链 BEVPoolV2 算子使用教程 【2】-BEVPoolV2 QAT 链路实现示例

1.引言 在上一篇帖子中,我们已详尽阐述了 BEVPoolV2 相较于 BEVPoolV1 的改进之处,并对 BEVPoolV2 实现的代码进行了解析。想必大家对 BEVPoolV2 算子的功能及实现已有了一定程度的理解,此篇帖子将展示 征程 6 工具链 BEVPoolV2 单算子 QAT 链路的实现范例,以进一步增进用户…

包装类--java进阶day05

1.包装类比如要让s+100,输出223.如果直接相加,结果是123100,这时就可以将s转换为包装类,然后再用包装类进行相加 2.包装类类型3.手动拆/装箱 我们这里只介绍Integer,其他包装类都是一个模板 第一个方式已经过时,不建议使用.4.自动拆/装箱.5.包装类常用方法 可以直接类名调…

掌握这些 UI 交互设计原则,提升产品易用性

在当今数字化时代,用户对于产品的体验要求越来越高,UI 交互设计成为决定产品成败的关键因素之一。一个易用的产品能够让用户轻松、高效地完成各种操作,而实现这一目标的核心在于遵循一系列科学合理的 UI 交互设计原则。本文将详细阐述简洁性、一致性、反馈、可访问性以及用户…

C++ this

今天开始进入C++学习了,之前的这周末复习下 侧重与底层原理 当把函数放到结构体里面,编译器会帮我们传递一个参数:结构体的地址this指针本质就是对象地址

【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】

当构建产物需要穿越多维宇宙时,当Docker镜像要同时存在于72个平行世界——这就是镜像推送的量子艺术。本文记录一个未来AI如何通过Harbor建立镜像星门,让每个构建产物都能瞬间抵达所有维度。![量子镜像跃迁示意图]( 摘要:当构建产物需要穿越多维宇宙时,当Docker镜像要同时存…

构造矩形

构造矩形 题目描述 现有 \(n\) 条长度为 \(m\) 的线段,垂直于 x 轴分布,且互不重合。第 \(i\) 条线段的两个端点均为整数点,分别为 \((a_i, 0)\) 和 \((a_i, m)\)。每条线段上有 \(m+1\) 个整数点,纵坐标分别为 \(0, 1, 2, …, m\)。 现在,你需要选择两条不同的线段,并在…