变量提升:

在js预编译阶段,函数和变量的声明会被提前检索编译,打乱了编写时的声明顺序。

函数字面量表达式不会被提升 var a = function(){};

ex:

console.log(a)

var a = 2;//undefined

console.log(a)//报错

分为两步进行:1.var a(变量提升) 2.a = 2

在es6中

let存在于块级作用域中,相同区域内不允许声明相同的变量名,外部区域无法访问

const:一旦声明变量赋值就不可改变,只声明不赋值会报错,可修改const声明对象类型,不能重复声明