let是ES6新增的,用来声明局部变量,作用于块级,有暂时性死区的约束;var是函数作用域
- var变量提升
var a = 111
f()
console.log(a) 111
function f() {
console.log(a) 111
}
var a = 111 //全局变量
f() //函数定义在调用的后面,但是函数声明会提升至作用域的顶部
console.log(a) 111
function f() {
console.log(a) //当前变量a是下面变量a声明提升后,默认值为undefined
var a = 110
console.log(a) 110
}
ES6之前,js只有函数和全局作用域
- let和for循环
参考博客 - let没有变量提升和暂时性死区
暂时性死区:使用let声明之前,该变量不可用 - let变量不能重复声明