var的痛点
可重复声明
代码这样写不会报错 😱
var a = 1;
var a = 2;
变量提升
变量提升容易导致bug
console.log(a); // undefined
var a = 1;
var没有块级作用域
例1
var a = 1;
if (true) {
var a = 2;
}
console.log(a); // 2
例2: 三次都打印3
for (var index = 0; index < 3; index++) {
setTimeout(() => console.log(index));
}
相当于
var index;
for (index = 0; index < 3; index++) {
setTimeout(() => console.log(index));
}
let
作用域: 块级作用域
打印: 0, 1, 2
for (let index = 0; index < 3; index++) {
setTimeout(() => console.log(index));
}
暂时性死区: 声明前无法访问
下面代码会报错, 声明前无法访问
let a = 10
function test(){
console.log(a)
let a
}
test() // 报错
重复声明:
同一个作用域不能重复声明
let a = 1;
let a = 2; // 报错
可变性
let a = 1
a = 2