var的缺陷
第一、污染全局空间
//ES5常见作用域 window、function、with等等
var a = 1;
console.log(window.a); // 1
第二、变量提升
console.log(b); //undefined
var b = 2;
console.log(b); // 2
等价于
var b;
console.log(b); //undefined
b = 2;
console.log(b); // 2
第三、重复声明
var a = 1;
var a = 2;
var a = 3;
console.log(a); //3
第四、无法声明常量
var a = 2;
a = 5;
console.log(a); // 5 无法定义不可更改的常量
第五、不会产生作用域
for(var i = 0;i < 9;i++){
setTimeout(()=>{
console.log(i);
},1000)
}
let 和 const的优势
//第一 解决了污染全局命名空间的问题
let a = 1;
console.log(window.a); // 获取不到a的值说明let声明的变量没有挂载在window上面,而是挂载在自己的作用域下面
//第二 解决了变量提升的问题
console.log(a); //不可以
let a = 1;
//第三 解决了重复声明的问题。这里的无法重复声明是指在同一个作用域下面无法重复声明。
let a = 1;
let a = 2; //不可以重复定义
//第四 解决了无法定义常量的问题
const a = 1;
a = 2; //不可以修改,这里的不可以修改是指不可以修改数据的指针。例如:
const b = {};
b.c = 2;
console.log(b); // 得到{c : 2}
//第五 let配合{}可以产生独立的作用域
for(let i = 0;i < 9;i++){
setTimeout(()=>{
console.log(i);
},1000)
}