let和var

54 阅读1分钟

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