浅谈var let const

浅谈var let const

var

在ES5中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量

var a = 10;
console.log(window.a) // 10

使用var声明的变量存在变量提升的情况

console.log(a) // undefined
var a = 20// 编译阶段,编译器会将其变成以下执行
var a
console.log(a)
a = 20

使用var,可对一个变量进行多次声明,后面声明的变量会覆盖前面的变量声明

var a = 20 
var a = 30
console.log(a) // 30

在函数中使用使用var声明变量时候,该变量是局部的,否则是全局的

// 局部
var a = 20
function changeA(){var a = 30
}
changeA()
console.log(a) // 20 // 全局
var b = 20
function changeB(){b = 30
}
changeB()
console.log(b) // 30 

let

let是ES6新增的命令,用来声明变量

用法类似var,但所声明的变量,只在let命令所在的代码块内有效

{let a = 20
}
console.log(a) // ReferenceError: a is not defined.

不存在变量提升

console.log(a) // 报错ReferenceError
let a = 1

这表示在声明它之前,变量a是不存在的,这时如果用到它,会抛异常

只要块级作用域内存在let命令,这个区域就不再受外部影响

var a = 123
if (true) {a = 'abc' // ReferenceErrorlet a;
}

使用let声明变量前,该变量都不可用,也就是常说的“暂时性死区

let不允许在相同作用域中重复声明

// 相同作用域
let a = 20
let a = 30
// Uncaught SyntaxError: Identifier 'a' has already been declared// 不同作用域
let b = 20
{let b = 30
}

因此,不能在函数内部重新声明参数

function func(arg) {let arg;
}
func()
// Uncaught SyntaxError: Identifier 'arg' has already been declared

const

const用于声明只读常量,一旦声明,常量的值就不能改变

const a = 1
a = 3
// TypeError: Assignment to constant variable.

因此,const 在声明常量的同时必须初始化

const a;
// SyntaxError: Missing initializer in const declaration

禁止对用var或let声明过变量,再用const声明,会报错

const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动*

  • 对于简单类型的数据,值就保存在变量指向的那个内存地址,因此等同于常量
  • 对于复杂类型的数据,变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的,并不能确保改变量的结构不变
const foo = {};// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

区别

特点varletconst
变量提升YNN
是否存在暂时性死区NYY
是否存在块级作用域NYY
是否允许重复声明YNN
是否允许修改声明的变量YYN

参考文献

面试官:说说var、let、const之间的区别

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

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

相关文章

【C++语言】模板

当谈到C中的模板时,我们在谈论一种强大的工具,它允许程序员编写通用的代码,而不必为特定类型编写多个版本。模板使得编写可重用和灵活的代码变得更加容易,因为它们允许您编写与任何数据类型一起使用的通用算法和数据结构。 什么是…

C++入门指南(上)

目录 ​编辑 一、祖师爷画像 二、什么是C 三、C发展史 四、C在工作领域的应用 1. 操作系统以及大型系统软件开发 2. 服务器端开发 3. 游戏开发 4. 嵌入式和物联网领域 5. 数字图像处理 6. 人工智能 7. 分布式应用 五、如何快速上手C 一、祖师爷画像 本贾尼斯特劳斯…

第二届“盘古石杯”全国电子数据取证大赛wp

服务器取证 先对网站进行重构 [rootstudy ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 643626ab3d8b mattermost/mattermost-pre…

Linux部署

先把需要的东西准备好: 第一步解压tomcat: tar -zxvf apache-tomcat-8.5.20.tar.gz 第二步解压jdk: tar -zxvf jdk-8u151-linux-x64.tar.gz 第三步配置Java环境变量: vim /etc/profile 把下面代码放进去: export JAVA_HOME/root…

dell服务器安装ubuntu18.04桌面版教程

目录 一、制作U盘启动盘 1.镜像下载地址: 2.制作U盘启动盘 二、服务器进入bios一系列设置 1.插入U盘启动盘 2.开机过程按F11键,进入Boot Manager ,点击 3.点击点击One-shot BIOS Boot Menu 4.进入boot menu ,找到U盘(一般…

react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)

什么是 Context 机制? Context 机制是 react 实现外层组件向内层组件传值的一种方案,父组件可以向其内部的任一组件传值,无论是子组件还是孙组件或更深层次的组件。 实现步骤 1.使用createContext方法创建一个上下文对象 Ctx 2.在顶层组件中通…

基于springboot的校园闲置物品交易系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的校园闲置物品交易系统,…

云南区块链商户平台:抓包技术自制开票工具(三)

前言 上节我们将登录的流程梳理完毕了,来到了本章重点,既然开发票就肯定要有以下参数: 原工具不支持识别历史记录,对于我们的小商店来说,开票的公司基本就是固定的几个,如果提供下拉支持选择将会大大降低…

Java高并发场景(银行转账问题)

最近面试问到了银行转账的高并发问题,回答的不是很理想,小编整理了下,题目大概如下: 有一张银行账号表(银行账号字段、金额字段),A账号要给B账号转账,A扣款,B收款&#x…

牛客_非技术快速入门_题目总结

牛客_非技术快速入门_题目总结 SQL29 计算用户的平均次日留存率 描述 题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。 示例:question_practice_detail id device_id quest_id result date 1 2138 111 wron…

@Transaction注解详情解释

概念: Transactional注解是Spring框架提供的一个用于声明式事务管理的注解,方便我们管理事务,保证数据的一致性与可靠性。 事务4个基本特性: 原子性:一个事务要不全部(sql)执行;要不…

Python图形界面(GUI)Tkinter笔记(四):控件的定位(2)

Tkinter(GUI)设计图形界面时有三种控件的包装方法去定位各控件在窗口(父容器、根窗口)上的位置。 【1】pack()方法:用方位来定位位置,类似于Word文档中的文字对齐方式。 【2】grid()方法:用二维表格式的坐标值定位,类似于EXCEL单元格坐标。 【3】place()方法:用窗口…

华为ce12800文件保存python之sftp

##CE12800 交换机上配置 [*SSH Server] dsa local-key-pair create [*SSH Server] sftp server enable [*SSH Server] ssh user adminadmin authentication-type password [*SSH Server] ssh user adminadmin service-type sftp [*SSH Server] ssh user adminadmin sftp-direc…

【机器学习】 技术栈和开发环境搭建

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 博客目录 技术栈编程语言库框架编辑器项目IDE …

linux下的进程通信

进程通信 进程为什么需要通信呢?进程通信的技术背景进程通信本质 进程通信分类管道匿名管道pipe匿名管道原理管道特点 命名管道创建命名管道命名管道原理 System V IPC管道与 System V的区别共享内存函数ftok()shmget() shmat()shmdt()shmctl()删除共享内存System V…

探索数据结构(让数据结构不再成为幻想)

目录 什么是数据结构 数据与结构 什么是算法 复杂度分析 时间复杂度与空间复杂度 时间复杂度 思考: 空间复杂度 常数阶O(1) 对数阶O(logn) 线性阶O(n) 以下为空间复杂度为O(n) 线性对数阶O(nlogn) 平方阶O(n) 指数阶O(2^n) 什么是数据结构 数据结构…

WHAT - CSS Animationtion 动画系列(二)

目录 一、循环波浪二、关键帧呼应三、关键帧顺接四、利用 transform-origin 做拉伸五、大元素可拆分多个小元素联动六、预留视觉缓冲七、随机感:动画周期设置八、抛物线:两个内外div实现x和y向量运动 今天我们主要学习动画实现要素。 一、循环波浪 利用…

类加载机制(双亲委派机制)

文章目录 JVM的作用是什么双亲委派机制加载流程 JVM的作用是什么 我们运行Java程序时,要安装JDK,JDK包含JVM,不同环境的JDK都是不同的。 Java 代码在编译后会形成 class 的字节码文件,该字节码文件通过 JVM 解释器,生…

音视频-H264编码封装- MP4格式转Annex B格式

目录 1:H264语法结构回顾 2:H264编码补充介绍 3:MP4模式转Annex B模式输出到文件示例 1:H264语法结构回顾 在之前文章里介绍过H264的语法结构。 传送门: 视音频-H264 编码NALU语法结构简介 2:H264编码补充介绍 H…

泽众财务RPA机器人常见五个应用场景

泽众RPA(即机器人流程自动化,Robotic Process Automation, RPA)解决方案是依托于各类先进信息技术手段的虚拟劳动力 (数字劳动力),根据预先设定的程序操作指令对任务进行自动化处理,实现业务流程…