JS中没有块级作用域,只有全局作用域和函数作用域;
let定义的变量让其产生了块级作用域。
Var没有块级作用域


Let有块级作用域


直接报错,因为离开了块级,变量不存在
Var有变量声明提升
函数声明和变量声明会被解释器“提升”到方法体的最顶部
注意:只有声明会被“提升”,赋值不会被提升
下面这样会直接报错


当函数体中有定义变量时,则不会报错,会undefined


Let无变量声明提升
下面代码会直接报错,所以声明let变量时要放在函数头部


函数声明提升


通过函数声明表达式,这样就不会造成覆盖的问题了。