# var
- var 可以重复声明
- 变量提升: var 函数声明和变量声明会被解释器“提升”到方法体的最顶部;
变量的初始化赋值并不会提升
即var a = 5 只会提升var a,不会提升a = 5这个赋值操作
a = 5
console.log(a) // 5
console.log(b) // undefined
var b = 3
var a
# let
- let 不可以重复声明
- let 不会出现变量提升
- let 会声明块级作用域变量
c = 5
console.log(c)
// let c // 会报错
var d = 2
function fun() {
console.log(d) // undefined
var d = 4
console.log(d) // 4
}
fun()
// var e = 7 这种写法是错误的
if(true){
console.log(e)
let e = 8
console.log(e)
}
# const
- const 相当于let定义的常量,不可更改,但是const对象可以改
const obj = {a: 1}
obj.a = 2
console.log(obj)
const obj2 = obj
const obj3 = {...obj} // 在堆里有了新的对象
console.log(obj === obj2)
console.log(obj === obj3)