1. let声明的作用域在块级中的变量、语句或者表达式。而var声明的变量只能是全局或者整个函数块的。
2. var 声明的变量在解释器会进行提升,而通过 let 声明的变量直到它们的定义被执行时才初始化。
let在变量初始化前访问该变量会导致 ReferenceError,该变量处在一个自块顶部到初始化处理的“暂存死区”中。
3. 就像const 一样,let不会在全局声明时(在最顶部的范围)创建window 对象的属性。
3. const用法多数和let相同,但const声明创建一个值的只读引用,且必须要赋值,也是块级作用域。
但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如,在引用内容是对象的情况下,这意味着可以改变对象的内容(例如,其参数)。