ECMAScript6----var、let、const

ECMAScript6----var、let、const

1.var

(1)在相同作用域下可重复声明

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

(2)存在变量提升

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

(3)可修改声明的变量(与const对比)

var a = 20
a = 12

(4)不存在暂时性死区
(5)与window相映射

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

2.let

(1)在相同作用域下不可重复声明(与var作对比)
如下,重复声明a会报错。
在这里插入图片描述
(2) 不存在变量提升(与var对比)

console.log(a) // 报错
let a = 20

上述代码在浏览器中会报错,如下:
在这里插入图片描述
(3)可修改声明的变量(与const对比)

let a = 20
a = 12

(4)存在暂时性死区(与var做对比)
注意:什么是暂时性死区?
在某个作用域中,用letconst定义了某变量,在该作用域内部该代码之前不能使用该变量。

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

(5)不与window相映射(与var做对比)

  let b = 12;
  console.log(window.b); //undefined

3.const

(1)在相同作用域下不可重复声明(与var做对比)
如下,重复声明x会报错。
在这里插入图片描述
(2)不存在变量提升(与var做对比)

console.log(a) // 报错
const a = 20

上述代码在浏览器中会报错,如下:
在这里插入图片描述
(3)不可修改声明的对象(引用对象可以修改)
不可修改基本数据类型变量,如下:

   const y = 12;
   y = 14;

控制台会报错:
在这里插入图片描述
可以修改引用数据类型变量的某个属性,如下:

const obj1 = { name: "bob" };
obj1.name = "jack";
console.log(obj1); //不会报错,打印{name: 'jack'}

但不能修改引用数据类型变量的地址,如下:

const obj2 = { name: "bob" };
obj2 = { name: "jack" }; //会报错
console.log(obj2);

在这里插入图片描述
之所以会出现这样子的原因,这个涉及到基本数据类型和引用数据类型在内存中的存储方式不同

基本数据类型的值直接存储在栈内存中,值与值之间独立存在,修改一个变量不会影响到其他变量。对象(引用数据类型)是保存在堆内存中的,每创建一个新对象,就会在堆内存中开辟出一个新空间,变量保存的是对象的内存地址(对象的引用)。

(4)存在暂时性死区(与var做对比)

(5)不与window相映射(与var作对比)

const c = 10;
console.log(window.c) // undefined
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳与星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值