前言
var,let,const想必大家应该经常使用吧,但其实他们之间还是有许多可以说道的地方,前不久,刚踩了个坑,所以记录下。
相同点
- var,let,const都可以用来声明变量,如下都是可行的
var a = 1
const b = []
let c = 's'
这是我们常用的,但如果只是这样,为啥要发明3个关键字来声明变量,所以我们需要来聊聊他们的不同
不同点
var定义的变量可以变量提升,而let和const定义的变量却不行
console.log(a)
console.log(b)
console.log(c)
var a = 1
let b = 2
const c = 3
我们知道变量提升可以让我们在变量定义之前就声明它,所以第一行应该输出 undefined (只声明未赋值)。但 b和c没有用var来定义所以,第二行第三行执行的时候就会抛出ReferenceError异常
var声明的变量可以重新声明,重新赋值。但let声明的变量在同一块作用域中不能重新声明,const声明的变量在同一块作用域中既不能重新声明也不能赋值,我们称之为常量,大家可以自行测试- 在上面提到了一个叫块级作用域的概念。以前是没有的,在ES6之后新增了块级作用域,这是因为
let和const声明的变量只能在块级作用域访问。什么是块级作用域呢?由{}花括号包括的区域就是一个块级作用域,这里就要提到我之前项目里踩到的坑
if(true){
const a = 1
}
alert(a)
有了上面知识的储备很显然这会报错,因为a变量只能在if这个块级作用域里访问。我们可以改为var来声明就没有问题了。
对这个小知识太不上心了,越是低级越容易踩到,希望大家引以为戒!!