- var let 声明后可变,const声明后不可变,复合类型数据不可变的是储存地址指针,而非属性值,例如下例是没有问题的
const obj ={ a: 2}
obj.a = 1
- let const 作用域块作用域 (大括号{}),而var作用于函数作用域或全局作用域
if(1){
let a = 1
var b = 2
}
console.log(b) //2
console.log(a) //ReferenceError: a is not defined
- var 声明会变量提升,声明前可调用,值是undefined,let与const不会,并直接报错
- let 与 var 可以先声明后赋值,而const不可以
- 在同一作用域下,同一变量名,var可重复声明,let const 不行
var a = 2
var a = 3 //a == 3
let b = 2
let b = 3 // Identifier 'b' has already been declared