1.let关键字声明的变量只在所处的块级作用域有效。
(1)两个作用:
-防止代码块内层变量覆盖外层变量
-防止循环变量变成全局变量
(2)在该块级变量的作用域范围之外使用该变量,控制台会报错: XX is not defined
(3)let不允许在相同作用域内重复声明同一个变量。
2.var关键字声明的变量存在变量提升,可以先使用再声明,值为undefined。let、const关键字声明的变量不存在变量提升,只能先声明再使用。
(1)用var声明的变量,从脚本运行开始,变量就已经存在,可在赋值前使用,不报错,但是值为undefined。
3.const声明的是只读常量,所以不能更改,const声明常量时必须赋值。且const关键字声明的变量也具有块级作用域 ,只能在该语句块内访问。
(1)const声明的变量,和let一样不可重复声明。
var a = "hello"
let b = "ok!"
//以下两行都报错
const a = "666"
const b = "fine"
~顺便记一记
ES6一共有6种声明变量的方法,分别是 var、const、let、function、import、class。
ES6的块级作用域必须有大括号,如果没有大括号,JS引擎就认为不存在块级作用域。
块级作用域之中,函数声明类似于let,在块级作用域之外不可引用。