(1)函数作用域 vs 块级作用域

    var 只有全局作用域和函数作用域概念,没有块级作用域的概念。

    let、const 只有块级作用域的概念 ,由 { } 包括起来,if语句和for语句里面的{ }也属于块级作用域。

    (2)变量提升 vs 暂时性死区

    变量赋值成功有三个阶段 创建(create),初始化(initialization),赋值

    var存在变量提升

    使用var声明变量,完成了初始化阶段,在var之前调用 返回undefined

    let、const存在暂时性死区

    使用let,const声明的变量之前都是不可用的,报错 Cannot access ‘xxx’ before initialization