【JavaScript】var, let, const区别

提出

var是ES5提出的,let和const是ES6提出的。

作用域不同

let和const具有块级作用域,var不存在块级作用域,可以跨块访问, 不能跨函数访问

// 全局
var a = 10
console.log(a) // 10

const test = (c) => {
    var b = 20
    console.log(b) // 20,这个b在函数内声明
    console.log(c)
}

test(10) // 20 10
console.log(b) // 报错,b没有被声明

什么是全局作用域、函数作用域?
在ES6之前,作用域只有两种:全局作用域和函数作用域。var声明的变量存在于这两个作用域中。
全局作用域中的对象在代码的任何地方都能访问。
函数作用域就是在函数内部定义的变量或者函数,并且定义的变量或者函数只能在函数内部被访问。而且函数执行结束之后,函数内部定义的变量会被销毁。

什么是块级作用域?
用 { } 包裹的一段代码,如函数、判断语句、循环语句、甚至单独的一个 { }:

// 函数块
function fun() {}

// 判断语句块
if(true) {}

// 循环语句块
while(true) {}
for(let i=0; i<10; i++) {}

// 单独一个块
{}

全局属性

var是全局的,window.a
var可以重复声明变量,后声明的变量会覆盖先声明的

变量提升

var存在变量提升;let和const不存在变量提升。

什么是变量提升?
允许在变量声明之前即被访问。
在代码执行之前,把当前作用域中var声明的变量全部提到当前作用域的最前面。
只提升声明,不提升变量。

function fn(){
    console.log(num)
    var num = 10
}

相当于以下代码:

function fn(){
    var num
    console.log(num)//undefined
    var num = 10
}

变量num在var声明之前即被访问,变量的值为undefined。

初始值设置

在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。

var a
let b
const c//错误,需要改为const c = 30

重复声明

var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历;
const和let不允许重复声明变量。

var a = 1;
var a = 2;
console.log(a);//输出2

可修改性

const声明的变量是常量,值不可修改;var和let声明的变量的值可以修改。

给全局添加属性

var声明的变量会挂载到window上;let和const声明的变量则不会。

var a = 1;
console.log('a', window.a);//a 1

let b = 2;
console.log('b', window.b);//b undefined

const c = 3;
console.log('c', window.c);//c undefined

暂时性死区

定义:let/const 命令会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。
在代码快内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。
结论:var不存在暂时性死区,let和const存在暂时性死区。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 上车的一些随想

​最近一直在做AI大模型上车的战略企划工作&#xff0c;听了好多供应商的宣讲&#xff0c;自己也查阅了大量书籍、资料。信息输入呈现爆炸性增长&#xff0c;受限于专业知识水平&#xff0c;仅能在应用层面上有所思考。纯个人观点&#xff0c;仅供参考。 车自古以来都是移动工…

JVM原理(七):JVM虚拟机的内存分配与回收策略

Java技术体系的自动内存管理&#xff0c;最根本的目标是自动化解决两个问题&#xff1a;自动给对象分配内存和 自动回收分配给对象的内存 1. 对象优先在Eden分配 参数解释-Xms初始堆大小-Xmx最大堆大小-XX:NewSizen设置年轻代大小-XX:NewRation设置年轻代和年老代的比值。如:为…

【PHP】控制摄像头缩放监控画面大小,并保存可视画面为图片

一、前言 功能描述 调用摄像头并可以控制缩放摄像头监控画面的大小&#xff0c;把可视画面保存为图片。 我使用的是USB摄像头&#xff0c;其他摄像头此方法应该也通用。 使用技术 使用到的技术比较简单&#xff0c;前端使用WebcamJS插件调用摄像头&#xff0c;并摄像头监控…

Java进阶学习|Day3.Java集合类(容器),Stream的使用,哈希初接触

java集合类&#xff08;容器&#xff09; Java中的集合类主要由Collection和Map这两个接口派生而出&#xff0c;其中Collection接口又派生出三个子接口&#xff0c;分别是Set、List、Queue。所有的Java集合类&#xff0c;都是Set、List、Queue、Map这四个接口的实现类&#xf…

VuePress日常使用

什么是主题&#xff1f;读者对主题这个单词应该不陌生&#xff0c;例如大部分 APP 都支持白天主题和夜晚主题等&#xff0c;使用者可以很轻松的切换主题等等。VuePress 中也有类似的概念。 ‍ VuePress 的主题 在 VuePress 中&#xff0c;主题不仅仅是外观上的不同&#xff…

#17前端后花园周刊-ECMAScript 2024、JS新set方法、TS5.5、理解React Compiler

⚡️行业动态 Ecma International 批准 ECMAScript 2024&#xff1a;有何新内容&#xff1f; Ecma 大会批准了最新的 ECMAScript / JavaScript 语言规范&#xff0c;正式使其成为标准。与 ECMAScript 2023 一样&#xff0c;这只是向前迈出的一小步&#xff0c;但 Axel 博士研…

详细配置SQL Server的链接服务器(图文操作Mysql数据库)

目录 前言1. MySQL ODBC 驱动2. 配置 SQL Server 链接服务器3. 彩蛋前言 此处配置以及安装没有什么理论知识 所以直奔主题,跟着以下步骤配置安装即可 需求:准备在10.197.0.110中链接外部的10.197.0.96的mysql数据源 已默认在10.197.0.96中安装了MySQL数据库并且知道其连接信…

Gradio 4.37.1官方教程三:Chatbot

文章目录 一、使用ChatInterface创建聊天机器人1.1 定义聊天函数1.2 流式聊天机器人&#xff08;Streaming chatbots&#xff09;1.3 自定义聊天机器人1.4 添加多模态功能1.5 通过additional_inputs添加额外组件1.6 直接添加 Gradio 组件1.7 通过 API 使用聊天机器人1.7.1 调用…

苹果可能与谷歌合作推AI订阅服务;全国首个司法审判大模型在深圳上线

&#x1f989; AI新闻 &#x1f680; 苹果可能与谷歌合作推AI订阅服务 摘要&#xff1a;苹果宣布将与OpenAI合作推出Apple Intelligence&#xff0c;并有望在今年秋季与谷歌达成合作&#xff0c;接入Gemini。Meta的Llama因质量不佳被拒。苹果计划推出订阅模式的智能功能服务&…

C语言--vs使用调试技巧

1.什么是bug? 1.产品说明书中规定要做的事情&#xff0c;而软件没有实现。 2.产品说明书中规定不要做的事情&#xff0c;而软件确实现了。 3.产品说明书中没有提到过的事情&#xff0c;而软件确实现了。 4.产品说明书中没有提到但是必须要做的事情&#xff0c;软件确没有实…

vue 组件el-tree添加结构指示线条

效果展示: 注意&#xff1a;组件中需要添加:indent"0" 进行子级缩进处理&#xff0c;否则会出现子级缩进逐级递增 :expand-on-click-node"false" 设置点击箭头图标才会展开或者收起 代码&#xff1a; <el-tree class"tree filter-tree" :da…

数据恢复篇:如何在电脑上恢复已删除和丢失的音乐文件

尽管流媒体网络非常流行&#xff0c;但许多人仍然选择将音乐下载并保存在 PC 本地。这会使文件面临丢失或意外删除的风险。 幸运的是&#xff0c;您可以使用数据恢复软件恢复已删除的音乐和其他文件类型。这篇文章讨论了这些解决方案以及如何使用奇客数据恢复检索丢失的音乐文…

【SpringCloud】Eureka源码解析 下

eurkea是一个服务发现与注册组件&#xff0c;它包含客户端和服务端&#xff0c;服务端负责管理服务的注册信息&#xff0c;客户端用于简化与服务端的交互。上一章分析了eureka的服务注册&#xff0c;这一章来分析eureka的心跳机制 参考源码&#xff1a;<spring-cloud.versi…

科普文:八大排序算法(JAVA实现)+ 自制动画 (袁厨的算法小屋)

我将我仓库里的排序算法给大家汇总整理了一下&#xff0c;写的非常非常细&#xff0c;还对每个算法制作了动画&#xff0c;一定能够对大家有所帮助&#xff0c;欢迎大家阅读。另外我也对 leetcode 上面可以用排序算法秒杀的算法题进行了总结&#xff0c;会在后面的文章中进行发…

OpenCV 调用自定义训练的 YOLO-V8 Onnx 模型

一、YOLO-V8 转 Onnx 在本专栏的前面几篇文章中&#xff0c;我们使用 ultralytics 公司开源发布的 YOLO-V8 模型&#xff0c;分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务&#xff0c;实验后发现效果都非常的不错&#xff0c;但是前面的演示都是基于 ultralytics…

计算机组成原理——寄存器

文章目录 1. 寄存器 2. 带寄存器的加法器 3. 时钟信号与计算速度 1. 寄存器 上一篇D触发器可以在时钟上沿存储1位数据。如果想存储多个位&#xff08;bit&#xff09;的数据&#xff0c;就需要用多个D触发器并联实现&#xff0c;这种电路称之为寄存器。 寄存器是计算机中央…

MATLAB使用系统辨识工具箱建立PID水温的传递函数系数

概述 利用PID控制水温&#xff0c;由于实际在工程项目中&#xff0c;手动调节PID参数比较耗费时间&#xff0c;所以可以先利用MATLAB中的Simulink软件建立模型&#xff0c;先在仿真软件上调节大概的PID参数&#xff0c;再利用此PID参数为基础在实际的工程项目中手动调节PID参数…

spring boot(学习笔记第十一课)

spring boot(学习笔记第十一课) Session共享&#xff0c;JPA实现自动RESTful 学习内容&#xff1a; Session共享JPA实现自动RESTful 1. Session共享 Session共享面临问题 spring boot默认将session保存在web server的内存里面&#xff0c;会产生什么问题呢。 如上图所示&#…

《昇思25天学习打卡营第15天 | 昇思MindSpore基于MindSpore的红酒分类实验》

15天 本节学了通过MindSpore的完成红酒分类。 1.K近邻算法&#xff08;K-Nearest-Neighbor, KNN&#xff09;是一种用于分类和回归的非参数统计方法&#xff0c;是机器学习最基础的算法之一。 1.1分类问题 1.2回归问题 1.3距离的定义 2.数据处理 2.1 数据准备 2.2 数据读取与处…

isupper()方法——判断字符串是否全由大写字母组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isupper()方法用于判断字符串中所有的字母是否都是大写。isupper()方法的语法格式如下&#xff1a; str.isupper() 如果字符串中包含至少…
最新文章