JS变量声明--var, let, const 的区别

ES6之前,我们都是使用 var 来声明一个变量。在ES6中,又新增加了 letconst 关键字用来声明变量。那么它们之间有何不同呢?
下面本文将一一说明:


let

let的用法与var十分相似,只是在功能上有以下几点不同:

  1. let 声明的变量只在定义的代码块内有效。比如下面代码中输出b就会报错!
{
	var a = 1;
	let b = 2;
}
console.log(a) // 1
console.log(b) // Uncaught ReferenceError: b is not defined
  1. let 声明的变量不会出现变量提升,即必须先声明再使用。比如下面代码中执行方法a()会报错!
function a () {
	console.log(b);
	let b = 2;
}
a(); // Uncaught ReferenceError: Cannot access 'b' before initialization
  1. 使用let声明会使块级作用域变为暂时性死区,即该代码块会与声明的变量绑定,不再受外部影响。这个理解起来有点难,我们看下面代码:
var b = 2;
function a () {
	console.log(b);
	let b = 3;
}
a(); // Uncaught ReferenceError: Cannot access 'b' before initialization

可以看到,执行方法a()仍然报错,这就是因为a()内部使用let定义b,使得a()内部不受外面使用var定义的b影响。所以出现了与第2条相同的报错!

  1. 使用let声明的变量不允许在作用域内重复声明。这条就比较好理解来,看下面代码吧!
function a() {
	let b = 2;
	let b = 3;
}
a(); // Uncaught SyntaxError: Identifier 'b' has already been declared

const

const是对let的增强,它能阻止对一个变量再次赋值。简单来说就是const相当于用let声明了一个只读的变量。使用const时除了上面关于let的注意事项外,还要注意以下几点:

  1. const声明的变量必须在声明时立即赋值,不可留待以后。且声明后值不可更改。比如下面代码就会报错:
const a = 1;
console.log(a); // 1
a = 2; // Uncaught TypeError: Assignment to constant variable.
const b; // Uncaught SyntaxError: Missing initializer in const declaration
  1. const本质上保护的是变量指向的内存地址中保存的数据不可改动,这对于简单类型的数据而言,内存中保存的就是值本身。但是对于复合类型数据(对象和数组)来说,内存中保存的只是指向实际数据位置的指针,const只能保护这个指针不变。比如下面代码:
const a = {
	'b': 1
}
console.log(a); // {b:1}
a.b = 2; // 不会报错
console.log(a); // {b:2}
a = {}; // Uncaught TypeError: Assignment to constant variable.

可以看到,只有在试图将一个空对象赋值给a时才会报错。因此将一个对象或数组赋值给const变量必须非常谨慎!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值