js 常见基础问题 var、let、const的区别

varlet 和 const 是 JavaScript 中用来声明变量的关键字,它们之间有几个关键的区别:

1.变量提升(Hoisting):
  • var 声明的变量会被提升到作用域的顶部,这意味着你可以在声明之前访问它们,值为 undefined
  • let 和 const 声明的变量不会被提升,如果你在声明之前尝试访问它们,会抛出一个 ReferenceError

2.块级作用域(Block Scope):
  • var 是函数作用域,如果在函数外部声明,则作用域是全局的。
  • let 和 const 是块级作用域,这意味着它们只能在花括号 {} 内部访问。

3.可重新赋值性:
  • var 和 let 都允许重新赋值。
  • const 声明的变量必须初始化,并且之后不能被重新赋值。

4.初始值:
  • var 和 let 可以在声明时省略初始值。
  • const 必须在声明时初始化,因为它的值不能被改变。

5.内存地址:
  • const 声明的变量指向的内存地址在初始化后不能被改变,但如果它包含的是一个对象或数组,对象的属性或数组的元素是可以被修改的。

6.声明提前:
  • var 声明的变量会被提前到作用域顶部,但不会被初始化。
  • let 和 const 声明的变量不会被提前,它们只有在声明到达时才会被初始化。

在 JavaScript 中,"变量提升"(Variable Hoisting)和"声明提升"(Declaration Hoisting)通常是指同一个概念,即变量和函数声明在代码执行前被提升到它们所在作用域的顶部。不过,严格来说,它们之间存在一些细微的差别:

1.变量提升(Variable Hoisting):

  • 指的是使用 var 关键字声明的变量会被提升到作用域的顶部。
  • 变量提升包括变量的声明和初始化(如果有的话)。
  • 如果没有初始化,变量会被自动初始化为 undefined

2.声明提升(Declaration Hoisting):

  • 通常用于指代函数声明的提升,即函数声明会被提升到作用域的顶部。
  • 函数声明的提升包括函数的定义,这意味着你可以在声明之前调用函数,并且调用是有效的。
  • 对于函数表达式(Function Expressions),包括箭头函数(Arrow Functions),不会被提升。

在实际使用中,这两个术语经常交替使用,因为它们描述的是同一个现象:在代码执行之前,声明(无论是变量还是函数)会被移动到作用域的顶部。重要的是要理解,只有函数声明(Function Declarations)会被提升,而函数表达式(Function Expressions)和变量声明(Variable Declarations)则不会被提升。

        总结来说,如果你需要一个变量在整个作用域内保持不变,并且指向一个不变的值(比如字符串、数字、布尔值、null 或 undefined),那么应该使用 const。如果你需要一个可以在整个作用域内被重新赋值的变量,那么应该使用 let。尽量避免使用 var,因为它的行为在某些情况下可能不符合预期。

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

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

相关文章

MySQL数据库操作学习(2)表查询

文章目录 一、表查询1.表字段的操作①查看表结构②字段的增加③字段长度/数据类型的修改④字段名的修改⑤删除字符段⑥清空表数据⑦修改表名⑧删除表 2、表数据查询3、where 字段4、聚合函数 一、表查询 1.表字段的操作 ①查看表结构 desc 表名; # 查看表中的字段类型&#…

K8S之持久化存储

持久化存储 支持的持久化存储类型EmptyDirHostPathNFS 在K8S中部署的应用都是以pod容器的形式运行的,假如部署数据库服务 例如:MySQL、Redis等,需要对产生的数据做备份。如果pod不挂载数据卷,那pod被删除或重启后这些数据会随之消…

Windows server Database 2025 安装 i225/i226 网卡驱动

windows这比坏得很,intel消费级网卡不准在服务器系统上安装。你要说他是异构不支持?他就纯粹恶心人。 之前已经安装过一次,但是今天database预览版一更新,又给我把网卡驱动杀了,气死,写一篇教程。 1.去官网…

SQLite优化实践:数据库设计、索引、查询和分库分表策略

文章目录 一、数据库设计优化1.1 合理选择数据类型1.2 使用NOT NULL约束1.3 使用默认值1.4 避免使用过多的列 二、索引优化2.1 为经常用于查询条件的列创建索引2.2 为经常用于排序和分组的列创建索引2.3 避免过多的索引2.4 使用覆盖索引 三、查询优化3.1 使用预编译语句3.2 优化…

​​SQLiteC/C++接口详细介绍之sqlite3类(十一)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:​​SQLiteC/C接口详细介绍之sqlite3类(十) 下一篇:​​SQLiteC/C接口详细介绍之sqlite3类(十二)(未发表) 33.sq…

LeetCode--14

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例…

C语言学习过程总结(18)——指针(6)

一、数组指针变量 在上一节中我们提到了,指针数组的存放指针的数组,那数组指针变量是什么呢? 显而易见,数组指针变量是指针 同样类比整型指针变量和字符指针变量里面分别存放的是整型变量地址和字符变量地址,我们可以…

Helm的资源安装和基本使用

目录 一.Helm的出现 二.Helm工具 1.部署helm 2.helm可用命令介绍 三.chart 1.添加、查看、删除存储库 2.查找chart、查看chart信息、安装chart等 3.安装chart后产生的release 四.安装mysql举例 1.固定chart安装 2.自定义chart安装 一.Helm的出现 在前面的k8s部署po…

13. C++类的简单理解

全面理解C中的类 1. 类的访问属性:public,protect,private C中类的成员变量和函数都带有三种属性中的一种,假如没有特别声明,那么就默认是私有的(除了构造函数)。public表示是公开的&#xff…

[WUSTCTF2020]颜值成绩查询 --不会编程的崽

这题也是一个很简单的盲注题目,这几天sql与模板注入做麻了,也是轻松拿捏。 它已经提示,enter number,所有猜测这里后台代码并没有使用 " 闭合。没有明显的waf提示, 但是or,and都没反应。再去fuzz一…

二叉树OJ练习

本文旨在讲解有关二叉树的OJ题目,希望读完本文,能让读者都二叉树有更深一步的认识! 正文开始! 106. 根据二叉树创建字符串 算法思想: 根据题目的输出结果,可以观察出如下规律! 1.若左右结点都…

Spring Boot整合STOMP实现实时通信

目录 引言 代码实现 配置类WebSocketMessageBrokerConfig DTO 工具类 Controller common.html stomp-broadcast.html 运行效果 完整代码地址 引言 STOMP(Simple Text Oriented Messaging Protocol)作为一种简单文本导向的消息传递协议&#xf…

以调试ffmpeg为例,演示gdb如何定位内存被修改

本文演示了使用gdb定位avformat_find_stream_info函数破坏codecpar变量的问题 1.查看音频或视频stream index【以下以视频为例】 ./ffprobe demo.avi 2>&1 | grep StreamStream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 1920x1080, 4021…

sqllab第二十七A关通关笔记

知识点: 双引号闭合union select 大小写绕过 Union Select这里不能进行错误注入,无回显 经过测试发现这是一个双引号闭合 构造payload:id1"%09and%091"1 页面成功回显 构造payload:id0"%09uNion%09SElect%091,2,3%09"1 页面成功…

在雄安新区买新房要注意什么?有哪些注意事项?

雄安新区新建住宅均价每平方米11735元起,二手房每平方米8950元起。 整体价格非常有优势。 雄安新区房价走势与区域发展直接相关。 而且,雄安新区已经成立五周年了。 2022年,雄安新区多项重点项目将陆续竣工。 雄安新区城市基础设施建设已初具…

Linux之shell循环

华子目录 for循环带列表的for循环格式分析示例shell允许用户指定for语句的步长,格式如下示例 不带列表的for循环示例 基于C语言风格的for循环格式示例注意 while循环格式示例 until循环作用格式示例 循环控制breakcontinue详细语法示例 循环嵌套示例 for循环 for循…

深度学习——SAM(Segment-Anything)代码详解

目录 引言代码目录segment-anything 代码详解build_sam.pypredictor.pyautomatic_mask_generator.py 引言 从去年年初至今,SAM(Segment Anything )已经问世快一年了,SAM凭借其强大而突出的泛化性能在各项任务上取得了优异的表现,广大的研究者…

代码随想录 二叉树—翻转二叉树

思路:想到递归,遍历方法:前序遍历(中左右),swap就是 中 的操作。 题解c: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *…

源码编译部署LAMP

编译部署LAMP 配置apache [rootzyq ~]#: wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz --2023-12-11 14:35:57-- https://downloads.apache.org/apr/apr-1.7.4.tar.gz Resolving downloads.apache.org (downloads.apache.org)... 88.99.95.219, 135.181.214.104…

Winform编程详解九:LinkLabel 链接标签控件

一、属性介绍 1. (Name) 控件的对象标识符ID 2. ActiveLinkColor 单击链接时的颜色 3. BackColor 控件的背景颜色 4. BorderStyle 控件的边框样式 5. Cursor 鼠标移过该控件显示的光标样式 6. DisabledLinkColor 不激活链接时的颜色 7. Font 控件的字体样式 8. ForeCol…