let const 是ES6新增的声明变量方法,用于解决var声明的一些问题
var 具有变量提升,let,const没有
var 可以重复声明,let,const不会
var 不具备块级作用域,会造成变量穿透,let,const具有块级作用域(for,if都是),不会造成穿透
let,const会造成暂时性死区
let 在最外层作用域声明的变量同样不属于全局变量,即无法使用window.xx来获取
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
//以上代码if后面{}形成了块级作用域,由于使用let声明了tmp,则这个变量就绑定了块区域,在声明之前使用,会报错。也叫暂时性死区
let a='aaa'
function log(){
console.log(a) //aaa 当前作用域找不到值,会去上级作用域寻找
console.log(this.a,window.a) //undefined let声明的变量不属于全局变量,不在window内
}
log()