js let 和 var 的区别

在 JavaScript 中,letvar 都是用来声明变量的关键字,但它们之间存在一些重要的区别:

  1. 作用域(Scope)var 在声明变量时具有函数级作用域,这意味着在函数内部用 var 声明的变量在整个函数内部都是可见的。而 let 具有块级作用域,它在声明变量时只在该块(以及任何包含块)内部可见。
function testVar() {var x = 10;let y = 20;if(true) {var x = 30;  // 这是合法的,因为 x 的作用域是整个函数console.log(x);  // 输出 30}console.log(x);  // 输出 30console.log(y);  // 输出 20
}testVar();

在上述例子中,我们在 if 块内部重声明了 x,这是合法的,因为 x 的作用域是整个函数。然而,我们在 if 块内部试图访问 y,这将导致错误,因为 y 的作用域仅限于包含它的块。
2. 提升(Hoisting):在 JavaScript 中,变量的声明会被“提升”到它们所在的作用域的顶部。这意味着你可以在声明之前使用变量。对于 var 声明的变量,会发生提升。但是对于 letconst 声明的变量,虽然也会被提升,但是你不能在声明之前访问它们(尝试这样做会抛出错误)。

console.log(x);  // 在 let x = 10; 之前,尝试访问 x 会抛出错误
let x = 10;
  1. 可重复声明:使用 var 可以多次声明同一个变量,而 let 在同一个作用域内不允许重复声明同一个变量。
  2. 全局作用域:在全局作用域中,var 声明的变量会成为全局对象(通常是 window)的属性,而 let 声明的变量不会。
  3. 块级作用域的独立性:使用 let 声明的变量在每个块(以及包含块)中都具有自己的独立作用域,即使这些块嵌套在一起。这意味着在嵌套的块中声明的变量不会与外部块的变量共享作用域。
  4. const 关键字constlet 的一个特殊形式,它用于声明一个只读的常量。一旦一个变量被 const 声明,它的值就不能改变(除非它被重新声明)。注意,对于对象和数组来说,只有对象的属性(而非对象本身)可以被声明为只读的。
  5. 全局环境中的差异:在浏览器环境中,使用 var 在全局作用域声明的变量将成为 window 对象的一个属性,而在 Node.js 中则不会。然而,使用 letconst 在全局作用域中声明的变量在两者中都不会成为 window 或全局对象的属性。

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

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

相关文章

探索 Vue3 ( 三 ) Teleport传送组件

Teleport Vue 3.0新特性之一。 Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但data、prop数据依旧能够共用的技术; Teleport中的内容允许我们控制在任意的 DOM 中,完全不受父级style样式…

Gartner2023数据库魔力象限发布 阿里云依旧领导者 腾讯退出 EDB/Yugabyte进入

这是一个跨越数年的系列,历史文章参考: * 数据库魔力象限2022:阿里领先、腾讯再次进入 * 2021 藏在魔力象限中的数据库江湖 * Gartner云计算魔力象限2018 概述 Gartner云数据库魔力象限(后简称“象限”或“MQ”)一…

SQL面试题挑战04:找出使用相同ip的用户

目录 问题:SQL解答: 问题: 现在有一张用户登陆日志表,该表包括user_id,ip,log_time三个字段,现在需要找出共同使用ip数量超过3个(含)的所有用户对。比如下面的示例数据,101和102用户共同使用的ip为4个&…

Postman报:400 Bad Request

● 使用Postman发送Post请求报400,入参为JSON; 二、分析 1、Postman请求并没有请求到后台Api(由于语法错误,服务器无法理解请求); 2、入参出错范围:cookie、header、body、form-data、x-www-f…

fastapi 处理请求参数整理

1、路径参数 app.get("/getfilecontent/{id}/{pre}") def get_filecontent(id,pre):"""路径参数,测试接口,读取当前工作目录下的file.txt文件,返回txt中的内容:param id: The ID of the item to retrieve.:param p…

百模大战中的AI行业:新趋势与未来发展

文章目录 每日一句正能量前言技术进步应用拓展行业变革人才竞争后记 每日一句正能量 人生最重要的价值是心灵的幸福,而不是任何身外之物。 前言 随着科技的迅猛发展,人工智能(AI)已经成为引领技术革命的重要驱动力之一。在当前的…

电气 接近开关

npn:和负载(控制器或者继电器)共阳极,低电平响应 pnp:和负载共阴极,高电平响应

阻焊层,预计将以4.5%左右的复合年增长率增长

阻焊层,也称为阻焊剂,是施加在印刷电路板 (PCB) 上的保护层,用于保护铜迹线在焊接过程中免受氧化、污染和损坏。近年来,由于消费电子、汽车、航空航天和电信等各种应用对 PCB 的需求不断增加,阻焊层市场一直在显着增长…

网页版音乐元数据编辑器Music Tag Web

什么是 Music Tag Web ? 『音乐标签』 Web 版是一款可以编辑歌曲的标题,专辑,艺术家,歌词,封面等信息的音乐标签编辑器程序, 支持 FLAC,APE,WAV,AIFF,WV&…

25、新加坡南洋理工、新加坡国立大学提出FBCNet:完美融合FBCSP的CNN,EEG解码SOTA水准![抱歉老师,我太想进步了!]

前言: 阴阳差错,因工作需要,需要查阅有关如何将FBCSP融入CNN中的文献,查阅全网,发现只此一篇文章,心中大喜,心想作者哪家单位,读之,原来是自己大导(新加坡工…

Docker 学习总结(80)—— 轻松驾驭容器,玩转 LazyDocker

前言 LazyDocker 是一个用户友好的命令行工具,简化了 Docker 的管理。它能够通过单一命令执行常见的 Docker 任务,如启动、停止、重启和移除容器。LazyDocker 还能轻松查看日志、清理未使用的容器和镜像,并自定义指标。 简绍 LazyDocker 是一个用户友好的 CLI 工具,可以轻…

Java小案例-Java实现人事管理系统

前言 《人事管理系统》该项目采用技术jsp、Struts2、Mybatis、dwr、tomcat服务器、mysql数据库 开发工具eclipse/idea。 【项目使用技术】 Struts2Mybatisdwrjqueryjscss等技术 前端使用技术:JSP, dwr、jquery、js、css等 后端使用技术:Struts2Myba…

【运维面试100问】(十三)谈谈session和cookic的区别

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

Pandas实践_分类数据

文章目录 一、cat对象1.cat对象的属性2.类别的增加、删除和修改 二、有序分类1.序的建立2.排序和比较 三、区间类别1.利用cut和qcut进行区间构造2.一般区间的构造3.区间的属性与方法 一、cat对象 1.cat对象的属性 在pandas中提供了category类型,使用户能够处理分类…

html之如何设置音频和视频

文章目录 前言一、音频标签:audio1.audio简介2.常用属性controlsautoplayloop代码演示: 二、视频标签:video1.video2.常用的视频元素controlsautoplayloop代码演示: 总结视频元素总结音频元素总结 前言 html中插入音频和视频的方…

【科学计算语言】实验一 Python数据类型与控制结构

实验名称 【目的和要求】 (1)掌握Python语言的分支及循环结构编程语句:if、for、while (2)熟练掌握Python基本运算和内置函数及数据表达 (3)在具体问题中综合运用顺序、分支、循环三种结构完成设…

macos 上使用 java+opencv记录

自编译 失败很多次之后终于跑起来一个 javaopencv 的demo。 过程 主要步骤如下: 编译需要 Apache Ant brew install ant需要告诉 opencv 需要 javabuild -DBUILD_opencv_javaON brew edit opencv编辑这个我错了很多次 直接编辑完了它会默认下载未修改的openc…

Java 并发编程 —— 透过源码剖析 ForkJoinPool

目录 一. 前言 二. 工作窃取的实现原理 2.1. WorkQueue(工作队列) 2.2. 工作窃取流程 三. ForkJoinPool 源码解析 3.1. ForkJoinPool 的字段 3.1.1. 常量 3.1.2. 成员变量 3.1.3. ctl(5个部分组成) 3.2. 构造函数 3.3.…

TensorFlow(3):初始TensorFlow

1 初始TensorFlow TensorFlow程序通常被组织成一个构件图阶段和一个执行图阶段。 在构建图阶段,数据与操作的执行步骤被描述为一个图 在执行图阶段,使用会话(调用系统资源)执行构建好的图中的操作 图和会话 图:这是…

HarmonyOS引导页登陆页以及tabbar的代码说明 home 下拉刷新页代码 5

下拉刷新页 代码说明 这一页第一次运行时很卡&#xff0c;就是你点击修改&#xff0c;要等一会才出来&#xff0c;加一句&#xff0c;修改的字样原来应是修车二字。只能将错就错。 const TopHeight 200; Component export default struct Car {State list: Array<number&…