js中的var,let,const有什么区别?


一、作用域

var的作用域是函数级作用域,let和const是块级作用域。

function fun() {
	var a = 1;
	if (1) {
		let b = 2;
		const c = 3;
		console.log(a);//1
		console.log(c);//3
	}
	console.log(a);//1
	console.log(b);//error
	console.log(c);//error
}
fun();
console.log(a);//error
console.log(b);//error
console.log(c);//error
        

大家可以通过对这段代码调试运行理解作用域的区别


二、重复声明

var可以被重复声明,let和const不可以重复声明。

var a = 1;
var a = 2;
console.log(a);//2
let b = 2;
let b = 3;//error
const c = 4;
const c = 5;//error

三、变量提升

var有变量提升,let和const没有变量提升。

console.log(a);//undefined
var a = 1;

console.log(b);//error
let b = 2;

console.log(b);//error
const c = 2;

四、暂时性死区

在let和const定义变量的上方会形成一个暂时性死区,当在暂时性死区内调用这个变量时会报错,var不会,因为有变量提升会输出undefined。


还有

当const定义一个基本数据类型的时候,这个变量的值不可更改,但是当const定义一个对象时,虽然这个对象不可更改,但是对象内部的值可以更改。
例如

const obj = {
	 name: 'liu',
	 age: 18
}
obj.age = 20;
console.log(obj);

运行结果
但是可以通过Object.freeze()解决这个问题:

const obj = {
	 name: 'liu',
	 age: 18
}
Object.freeze(obj);
obj.age = 20;
console.log(obj);

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值