ES2015已经用let代替var,并完善了var的一些特性,之所以换了一个关键词还保留原有的var关键词是因为原有的很多项目在使用var,所以不能取消,而是用一个新的关键词替代。
一、块级作用域(let声明的变量只能在代码块中被访问到)
以前块没有独立的作用域,外部成员也能访问块内部的变量。
🌰
if内就是一个块,在内部声明一个变量,外部能访问。
if(true){
var foo = 'zcy
}
console.log(foo)
zcy
let声明的变量只能在代码块中被访问到。把var改为let。
if(true){
let foo = 'zcy
}
console.log(foo)
ReferenceError: foo is not defined
所以,在块级作用域内,外部是无法访问的。
二、let和var的另一个很大的区别在于:let的声明不会出现提升的情况。
而var声明的变量都会被提升到最顶部。
🌰
用var声明变量,执行这两行代码,打印的结果是undefined,没有报错误,说明foo已经声明,只是还没有赋值
console.log(foo)
var foo = 'zcy'
undefined
用let声明变量,就报错了
console.log(foo)
let foo = 'zcy'
ReferenceError:Cantnot access 'foo' before initialization
网友评论