javascript的var与let,const之间的区别详解

作者:庸人° 时间:2024-05-09 15:06:41 

说到JavaScript中声明变量的几种方法也就是varletconst了,letconstes6中新增的命令。那么它们之间有什么区别呢?

我们先整体说一下三者的区别,在详细介绍,var、let、const的区别主要从以下几点分析:

  • 作为全局变量时的不同

  • 变量提升

  • 暂时性死区

  • 块级作用域

  • 重复声明

  • 修改声明的变量

作为全局变量时

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

但是ES6中用let声明的变量可以在全局访问到,但是并没有在顶层变量的属性上,const声明的常量同样也不会在顶层变量上

javascript的var与let,const之间的区别详解

变量提升

var声明的变量存在变量提升,及变量可以在声明之前调用,值为undefined

letconst不存在变量提升,即它们所声明的变量一定要在声明后使用,否则会报错

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不存在暂时性死区

letconst存在暂时性死区,只有等到声明变量的那一行代码被执行后,才可以获取和使用该变量

其实这一点就是有上一点变量提升延伸而来的区别。因为var声明的变量存在变量提升,在声明之前使用该变量值为undefined,不会报错,所有没有暂时性死区。letconst在该作用域开始前后,变量或常量声明之前使用会报错,这一块区域也就被称为暂时性死区

例同上文:

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不存在块级作用域

letconst存在块级作用域

{    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在相同作用域下允许重复声明,后面声明的变量会覆盖前面的变量声明

letconst在相同作用域下不允许重复声明

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

修改声明的变量(常量与变量声明)

varlet声明的是变量,声明后的变量可被修改

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

标签:javascript,var,let,const
0
投稿

猜你喜欢

  • Python爬虫逆向分析某云音乐加密参数的实例分析

    2022-05-25 20:33:14
  • windows下安装python paramiko模块的代码

    2021-05-11 03:11:23
  • mysql中的临时表如何使用

    2024-01-28 10:19:21
  • MSSQL数据加密解密代码

    2023-07-08 18:45:30
  • vscode ssh远程连接服务器的思考浅析

    2023-06-05 07:12:05
  • Tensorflow 2.1完成对MPG回归预测详解

    2023-06-30 07:31:36
  • Python抓取数据到可视化全流程的实现过程

    2021-06-14 02:03:28
  • Mysql的longblob字段插入数据问题解决

    2024-01-24 09:49:52
  • 基于Python中的turtle绘画星星和星空

    2022-10-31 08:57:41
  • 导入tensorflow:ImportError: libcublas.so.9.0 报错

    2023-07-07 11:44:46
  • Python yield 小结和实例

    2023-07-21 15:37:39
  • python定时截屏实现

    2021-01-28 22:04:09
  • PHP在线打包下载功能示例

    2024-06-05 09:40:17
  • SQL Server误区30日谈 第17天 有关页校验和的误区

    2024-01-27 17:48:47
  • Javascript 类型转换方法

    2024-04-10 10:51:21
  • 揭秘SQL Server 2008性能和可扩展性

    2009-03-10 14:47:00
  • 利用Python如何生成便签图片详解

    2021-01-02 18:09:52
  • Python中Iterator迭代器的使用杂谈

    2023-11-23 03:49:30
  • 深入了解Golang中的数据类型

    2024-02-10 10:17:49
  • Utf-8和Gb2312乱码问题的终结

    2008-04-05 14:04:00
  • asp之家 网络编程 m.aspxhome.com