javascript的var与let,const之间的区别详解
作者:庸人° 发布时间:2024-05-09 15:06:41
说到JavaScript
中声明变量的几种方法也就是var
、let
、const
了,let
和const
是es6
中新增的命令。那么它们之间有什么区别呢?
我们先整体说一下三者的区别,在详细介绍,var、let、const的区别主要从以下几点分析:
作为全局变量时的不同
变量提升
暂时性死区
块级作用域
重复声明
修改声明的变量
作为全局变量时
在ES5
中,顶层对象的属性和全局变量是等价的,用var
声明的变量既是全局变量,也是顶层变量的属性
但是ES6
中用let
声明的变量可以在全局访问到,但是并没有在顶层变量的属性上,const
声明的常量同样也不会在顶层变量上
变量提升
var
声明的变量存在变量提升,及变量可以在声明之前调用,值为undefined
let
和const
不存在变量提升,即它们所声明的变量一定要在声明后使用,否则会报错
console.log(a) // undefinedvar a = 1console.log(b) // Cannot access 'b' before initializationlet b = 2console.log(c) // Cannot access 'c' before initializationconst c = 3console.log(a) // undefined
var a = 1
console.log(b) // Cannot access 'b' before initialization
let b = 2
console.log(c) // Cannot access 'c' before initialization
const c = 3
暂时性死区
var
不存在暂时性死区
let
和const
存在暂时性死区,只有等到声明变量的那一行代码被执行后,才可以获取和使用该变量
其实这一点就是有上一点变量提升延伸而来的区别。因为var
声明的变量存在变量提升,在声明之前使用该变量值为undefined
,不会报错,所有没有暂时性死区。let
、const
在该作用域开始前后,变量或常量声明之前使用会报错,这一块区域也就被称为暂时性死区
例同上文:
console.log(a) // undefined
var a = 1
console.log(b) // Cannot access 'b' before initialization
let b = 2
console.log(c) // Cannot access 'c' before initialization
const c = 3
块级作用域
var
不存在块级作用域
let
和const
存在块级作用域
{ var a = 2}console.log(a) // 2{ let b = 2}console.log(b) // Uncaught ReferenceError: b is not defined{ const c = 2}console.log(c) // Uncaught ReferenceError: c is not defined
重复声明
var
在相同作用域下允许重复声明,后面声明的变量会覆盖前面的变量声明
let
、const
在相同作用域下不允许重复声明
var a = 10
var a = 20 // 20
let b = 10
let b = 20 // Identifier 'b' has already been declared
const c = 10
const c = 20 // Identifier 'c' has already been declared
修改声明的变量(常量与变量声明)
var
和let
声明的是变量,声明后的变量可被修改
const
声明得失常量,只读。一旦声明,常量的值就不能改变。但是需要注意的是,对于引用数据类型,JavaScript
中的变量或者常量存储的是该数据的存储地址,只要不直接修改该常量的引用,修改其指向的对象的属性是可以的。
var a = 10
a = 20
console.log(a) // 20
let b = 10
b = 20
console.log(b) // 20
const c = 10
c = 20 // Uncaught TypeError: Assignment to constant variable
来源:https://blog.csdn.net/wuxian_wj/article/details/122245154


猜你喜欢
- 最近在写的一个django小项目需要实现用户上传图片的功能,使用到了七牛云存储,特此记录下来。这里我使用的七牛python SDK 版本是7
- 前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,
- 目录1. 配置Python环境变量2. 安装Python编辑器,并在其中配置Python3. 安装控制包uiautomator2,和其它辅助
- 项目编写过程中,总能遇见对字典进行排序什么的,如果要实现多条件排序只需要下面几行代码实现。充分体现了python的好处了。teamitems
- 数组求和与平均值ls=[4,9,19,8,391,39,9,283,45]sum(ls)average=sum(ls)/len(ls)pri
- myisam_max_[extra]_sort_file_size足够大delay_key_write减少io,提高写入性能bulk_ins
- Basemap是matplotlib子包,也是python中最常用、最方便的地理数据可视化工具之一。在中端输入pip list先查看是否有j
- 训练用PyTorch编写的LSTM或RNN时,在loss.backward()上报错:RuntimeError: Trying to bac
- 在使用 SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了。一般而言,有以下两种连接 SQL Server 的方式,一是利
- http://validator.w3.org/#validate_by_upload 在线校验网址点浏览,上次找到自己做的页面
- 本文实例为大家分享了python定义带参数装饰器的具体代码,供大家参考,具体内容如下案例: &
- 1.package.json作用:package.json 文件其实就是对项目或者模块包的描述,里面包含许多元信息。比如项目名称,项目版本,
- (PS:本文假设你已经在本地联调好django和客户端,只是需要将django部署到外网)购买阿里云服务器到[阿里云官网],选择轻量应用服务
- dict的很多方法跟list有类似的地方,下面一一道来,并且会跟list做一个对比嵌套嵌套在list中也存在,就是元素是list,在dict
- JOIN对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种JOIN,还有很多人对这个理解也不是很透彻。假设我们有两个表,Table_
- pytorch geometric的GNN、GCN节点分类# -*- coding: utf-8 -*-import osimport to
- 起因前端日子写完的Python入库脚本,通过直接读取配置文件的内容(包含了数据库的ip,数据库的用户名,数据库的密码),因为配置文件中的数据
- Tensorflow数据读取有三种方式:Preloaded data: 预加载数据Feeding: Python产生数据,再把数据喂给后端。
- pip install prettytable每次添加一行from prettytable import PrettyTable# &nbs
- 下面是我写的NumericStepper:谢谢 果果 和 Rimifon , 我对代码进行了完善, 支持自适应小数位数: