前端JavaScript篇之let、const、var的区别

news2024/11/26 16:36:26

目录

  • let、const、var的区别


let、const、var的区别

let、const和var是JavaScript中用于声明变量的关键字,它们之间有一些区别。

首先,var是在ES5中引入的关键字,而let和const是在ES6中引入的。在ES6之前,我们只能使用var来声明变量。

var关键字存在一些特殊的行为,它具有函数作用域而不是块级作用域。这意味着使用var声明的变量在整个函数内部都是可见的,而不仅仅是在声明的块内部。

相比之下,let和const关键字引入了块级作用域。块级作用域是指变量仅在声明它们的块(通常是由花括号 {} 包裹的代码块)内部可见。这意味着使用let或const声明的变量只在当前块内有效,超出块的范围后就无法访问。

另一个区别是var关键字存在变量提升(hoisting)的行为,即变量可以在声明之前使用。这意味着我们可以在变量声明之前访问和使用它,但它的值会是undefined。而let和const不存在变量提升,如果在声明之前访问变量,会抛出一个引用错误。

此外,let和const还有一个重要的区别是它们的赋值和重新赋值行为。使用let声明的变量可以被重新赋值,而使用const声明的变量是常量,一旦赋值后就无法再修改。

下面是一个具体的案例,展示了let、const和var的区别:

function example() {
  var x = 10
  let y = 20
  const z = 30

  if (true) {
    var x = 50
    let y = 60
    const z = 70
    console.log('Block scope:', x, y, z) // 输出:Block scope: 50 60 70
  }

  console.log('Function scope:', x, y, z) // 输出:Function scope: 50 20 30
}

example()

console.log('Global scope:', x) // 输出:ReferenceError: x is not defined

请添加图片描述

在上述代码中,我们定义了一个函数example,内部使用var、let和const声明了变量x、y和z。

在函数的块级作用域内部,我们通过var重新赋值了变量x,并使用let和const声明了新的变量y和z。在块级作用域内部,x的值被修改为50,y和z分别是60和70。

在函数的函数作用域内部,我们输出了变量x、y和z的值。由于var具有函数作用域,块级作用域内的x的赋值影响了函数作用域内的x,因此输出了50。而let和const的作用域仅限于块级作用域,所以函数作用域内的y的值保持为20,z的值保持为30。

最后,在全局作用域中访问变量x时,由于x是在函数作用域内部声明的,因此会抛出一个引用错误。

区别varletconst
块级作用域×✔️✔️
变量提升✔️××
全局属性✔️××
重复声明变量✔️××
暂时性死区×✔️✔️
初始值设置××✔️
指针指向✔️✔️×

总结来说,let、const和var之间的主要区别在于作用域和赋值行为。let和const引入了块级作用域,并且const声明的变量是常量不可修改,而var具有函数作用域和变量提升的特性。

持续学习总结记录中,回顾一下上面的内容:
let、const和var之间的主要区别在于作用域和赋值行为。let和const引入了块级作用域,并且const声明的变量是常量不可修改,而var具有函数作用域和变量提升的特性。

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

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

相关文章

Thinkphp5.0.23远程代码执行漏洞复现

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、漏洞介绍 使用Thinkphp5.x远程代码执行漏洞&#xf…

操作系统--进程、线程基础知识

一、进程 我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就…

python爬虫-多线程-数据库——WB用户

数据库database的包: Python操作Mysql数据库-CSDN博客 效果: 控制台输出: 数据库记录: 全部代码: import json import os import threading import tracebackimport requests import urllib.request from utils im…

博客文章质量分数列表【分页、排序、搜索】

文章目录 一、分析二、代码1、前端代码2、后端代码 三、实现效果四、总结1、出现安全验证2、401 Unauthorized: [no body] 一、分析 官方提供的质量分查询入口:CSDN质量分 输入我们要查的文章即可,比如:https://blog.csdn.net/qq_36433289/a…

开发板——X210开发板的SD卡启动方式

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客: S5PV210 SD卡启动 - 简书 关于存储器的相关基础知识,见博文: 外存——SD卡/iNand芯片与S5PV210的SD/MMC/iNand控制器-CSDN博客 RAM、ROM和FLASH三…

了解WPF控件:TreeView常用属性与用法(十五)

引言 TreeView控件是WPF(Windows Presentation Foundation)中用于显示分层数据的常用控件。这个控件允许用户以树形结构展示数据,使得数据更加清晰易懂。在创建文件浏览器、组织结构图等应用程序时,TreeView控件非常有用。 Tree…

R语言入门笔记2.0

1.创建数据框 在R语言中,可以使用data.frame函数来创建数据框。以下是一个简单的示例,这段R语言代码创建了一个名为student的数据框,其中包含了学生的ID、性别、姓名和出生日期,首先创建一个包含学生出生日期的向量,再…

探秘本庄村果园预售系统的技术之旅

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【MCAL】TC397+EB-tresos之GPT配置实战 - 定时器

本篇文章介绍了在TC397平台使用EB-tresos对GPT驱动模块进行配置的实战过程,不仅介绍了使用GTM来实现定时器的方案,还介绍了基于GPT12来实现连续定时器的实例。因为GTM是德国博世公司开发的IP,而英飞凌的芯片集成了这个IP,并在这个基础上搭建了…

Pytest 与allure测试报告集成

通过Feature, story, step 记录测试的功能,场景及测试步骤 # login.pylogin_func函数 传入参数是name 和 password 当输入的name和password与数据库db_data中数据一致时,返回“XXX成功登录系统!” 当输入的name存在于数据库db_data但密码不正…

双非本科准备秋招(13.1)—— 力扣 栈、队列与堆

1、103. 二叉树的锯齿形层序遍历 昨天做的二叉树的层序遍历,把代码直接拿过来。 这个题要求的是一个Z型遍历,如下图。 用一个变量f记录正反顺序,然后使用LinkedList记录答案,下图可以看到LinkedList继承了Deque,所以…

【知识图谱--第一讲概论】

深度学习–连接主义 知识图谱–符号主义 表示 有属性图和RDF图两种 RDF由三元组表示:Subject - Predicate - Object 存储 图数据库 抽取 融合 推理 问答 图算法

Linux:进程信号的概念与产生原理

文章目录 信号的概念实践信号关于前台和后台进程的操作 操作系统与外设信号的产生signal系统调用 前面的篇章结束了信号量的话题,那么接下来引入的是信号的话题,信号和信号量之间没有任何关系,只是名字比较像 信号的概念 在生活中存在各种各…

linux麒麟系统安装mongodb7.0

1.mogedb下载 下载的是他tar包 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.5.tgz wget -o https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.5.tgz 也可以下载rpm包 2.将包上传至服务器并解压 #进入目录 并解压 cd /opt/ tar…

Linux ---- Shell编程之免交互

一、Here Document 多行重定向 1、Here Document定义 使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品Here Document 是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件…

技术科普 | 机器视觉5大关键技术及其常见应用

计算机视觉是指:让机器通过数字图像或视频等视觉信息来模拟人类视觉的过程,以达到对物体的理解、识别、分类、跟踪、重建等目的的技术。它是人工智能领域中的一个分支,涉及图像处理、模式识别、机器学习、深度学习等多个领域。 随着人工智能和…

7.2、子集求和问题与背包密码系统

7.2、子集求和问题与背包密码系统 一、数学描述 1.1、第一种描述 20 世纪 70 年代末,默克尔和赫尔曼首次尝试将密码系统建立在一个 NP-完全问题上。他们使用了以下数学问题的一个版本,该问题是对经典knapsack问题的概括。 子集和问题 假设你有一个正…

数据结构——链式二叉树(3)

本篇文章我们依然讲解链式二叉树的OJ题; 一、二叉树的层序遍历 层序遍历即从根节点开始一层一层的遍历。我们可以运用队列的先进先出特性实现! //层序遍历 void a(BTNode* root) {Que qhead;Queueinit(&qhead);//先入队根节点if(root)QueuePush(&…

C#,计算几何,随机点集之三角剖分的德劳内(Delaunay)算法的源代码

一、三角剖分Delaunay算法简介 点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关…

LeetCode: 160.相交链表(令人赞叹的优雅)

160. 相交链表 - 力扣(LeetCode) 目录 官方双指针解法: 博主的辣眼代码: 每日一表情包: 博主还未学习哈希表,所以介绍的是双指针法,此题的哈希表解法时O(nm)空O&…