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]