##变量提升
通常JS引擎会在正式执行之前先进行一次预编译,在这个过程中,首先将变量声明及函数声明提升至当前作用域的顶端,然后进行接下来的处理。
##函数提升
函数的优先权是最高的,它永远被提升至作用域最顶部,然后才是函数表达式和变量按顺序执行。
##let的特性
1.let没有变量提升
没有变量提升的let,如果你在定义它之前输出它的话,就会报错了。
2、Let不允许重复声明
var 可以重复声明,很随意 ,但是let不行,
let不能重新声明一个变量,记住是声明,不是赋值,可以重新赋值因为他是变量。
3.let有暂时性死区
let在他的的的当前作用域范围内,不允许其他同名变量进来
4.Let有块级作用域
let有块级作用域,不光在函数里有,在循环里也有