ES6学习——let和const的特性以及区别

本文详细探讨了ES6中的let和const命令。let限制了变量的作用域,避免了变量提升,存在暂时性死区,并且不允许重复声明。而const用于创建不可变的常量,其值在声明时必须初始化且不可更改。尽管const常量的引用不能改变,但引用的数据类型的属性仍可修改。通过实例解析了const定义引用数据类型时的特性和注意事项。
1.let

let用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
用let声明变量a:

运行结果:

用发var定义变量b:

运行结果:

let的特点:
1)不存在变量提升。
注:变量提升即变量可以在声明之前被使用,值为undefined。
var就会存在变量提升的现象,而let规定,let的变量一定要在声明之后使用,否则就会报错。
例如:

{
	//变量i在声明之前被使用
	console.log(i)
	var i = 1;
}

但是上述情况不会报错,而是会打印出undefined。
因为var存在变量提升,所以其执行流程实际是这样的:

{
	var i;
	console.log(i)
	i = 1;
}

因为变量提升只会提升变量的声明,不会提升赋值,所以才会输出undefined。
2)暂时性死区:只要块级作用域内存在let命令,它所声明的变量就绑定这个区域,不再受外部的影响。如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
3)不允许重复声明:let不允许在相同作用域内,重复声明同一个变量,否则就会报错。

2.const

const声明一个只读的常量。一旦声明,常量的值就不能改变,如果用const声明一个变量并赋值之后,再给这个变量重新赋值,就会报错。而且,const一旦声明变量,就必须初始化,不能留到以后再赋值。如果只声明不赋值就会报错。
(注:初始化即赋值)
特点:
1)同let,只在声明所在的块级作用域内有效。
2)const命令声明的常量不存在提升。
3)存在暂时性死区

3.const定义的变量是否可以改变呢?

const是用来定义常量的,而且规定定义的时候必须初始化,且定义后不可以修改。
对于基本数据类型来说,如果定义的时候不初始化值的话就会报错,错误内容就是没有初始化;如果定义并初始化了之后,再对值进行修改,也会报错。
因为在基本数据类型中,值是存在栈中的,const定义的这个恒定的变量保存的是值,而const定义后的变量值不可以修改,修改就会报错。
对于引用数据类型来说:
1)如果使用const定义引用数据类型的话,对象的属性是可以被修改的,不会报错。
例如:

const person = {
				name:"Jack",
				age:18,
				sex:"man"
			}
			console.log(person)
			person.name = "Mary";
			console.log(person)

输出结果:

2)如果使用const定义引用数据类型的话,修改指向的对象就会报错。例如:让person指向另一个对象:

const person = {
				name:"Jack",
				age:18,
				sex:"man"
			}
			person = {
				name:"Jack",
				age:18,
				sex:"man"
			}
			console.log(person)

输出结果:

这是为什么呢?
是因为在引用数据类型中,对象存在堆中,对象的地址存在栈中,const定义的这个恒定的变量保存的是其对象的地址,所以修改对象的内容不会报错,但是如果修改的是对象的地址,则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值