let,const,var (块级作用域与暂时性死区)
关于变量提升
var 存在变量提升,即变量申明和初始化为undefined
let,const 不存在变量提升,减少运行时的错误,es特意将“声明前不可用”这一点做了强约束
块级作用域(一对{}括起来的代码称为代码块
let和const所在的块形成块级作用域,不会被外界访问到
{
let name="lizzy";
console.log(name); //lizzy
}
console.log(name); //报错
const
const声明的变量必须同时被初始化,否则会报错;
const声明的变量如果是引用,可以更改这个引用的内容,但是不能更改引用
const me={name:'lizzy'}
const me={} //报错
me.name="zzjwd'
me //{name:'zzjwd'}
暂时性死区
es6规定如果区块中存在let和const,那么这个区块对这些命令声明的变量,从一开始就形成了封闭作用域
var a=1;
function add(){
let b=2;
return a+b;
}
add() //3
a+b //1[Object Object]