①Let和var是用来声明变量的可以重新赋值
Const是用来声明常量的,设置初始值后,不可以重新赋值
②重复说明:已经存在的变量或常量,又声明了一次(包括函数的参数)
Var允许重新声明,let和const不允许
③变量提升:var可以提升变量的声明到当前作用域的顶部,不会提升变量的值
而let和const不会提升变量
④暂时性死区:只要作用域内存在let、const,它们所声明的变量或者常量就自动“绑定”在这个区域里面,不再受外部作用域的影响,并且只有在声明变量之后,才可以获取和使用该变量,否则就会报错。Let和const存在暂时性死区,而var 不存在。
⑤window对象的属性和方法:在全局作用域中,var声明的变量,通过function声明的函数,会自动变成window对象的属性或者方法,而let、const不会。
⑥块级作用域:var没有块级作用域,let和const有块级作用域。{}、循环语句、判断语句和let、const配合使用的都可以成为块级作用域。Function(){}为函数作用域。块级作用域是ES6中新增的一个作用域,指在大括号{}里面使用let或const关键字声明变量或常量,就会形成一个块级作用域。但有两个需要特殊记忆,函数和对象的大括号{}不属于块级作用域。
块级作用域有:for / while / {} / do while / if / switch