// 1.es5只有全局作用域和函数作用域, es6添加块级作用域 {}
if(true){
let a = 1;
}
console.log(a) //因为let,const作用域在{}内,所以此时得到结果:a is not defined
// 2.var 可以随时改变变量,并且变量可升级 undefined 定义的变量会作为window对象的属性
x = 1;
var x; //先赋值后声明,变量x声明提升
console.log(x)
y = 1;
let y;
console.log(y) //报错
z = 1;
const z;
console.log(z) //报错
// 3.let 可以改变值,const不可改变值,只能改变当前值内的值
if(true){
let a = [];
a = [2]; //[2]
console.log(a)
const b = []
b = [2]
console.log(b) //报错
}
if(true){
const a = [];
a[0] = 2;
console.log(a) //[2]
let b = [];
b[0] = 2;
console.log(b) //[2]
}
// 4.var命令能重复声明,后者覆盖前者;let 和 const不允许在相同作用域内,重复声明同一个变量
if(true){
var a = 1;
var a = 2;
console.log(a) //2
let b = 1;
let b = 2;
console.log(b) //报错
const c = 1;
const c = 2;
console.log(c) //报错
}