首先说明一下,这里的区别更多的指的是在变量提升方面的区别
1 var声明的变量
console.log(a) // undefined
var a = 10
第一步,create a
第二步,initialized a -> 将a的值初始化为undefined
第三步,执行代码
console.log(a) // undefined
a = 10
2 let声明的变量
console.log(a) // ReferenceError
let a = 10
a = 20
第一步,create a
第二步,执行console.log(a),由于此时a还未被初始化,a存在于暂时性死区里面,所以无法使用,所以会报ReferenceError错误
// 由于上一步报错,此后的步骤不会执行
第三步,初始化a并赋值