1. 全局污染
var 声明的变量(全局作用域)会挂载到 window 对象上
let 则不会
二者都可以跨 <script> 标签使用
2. 块级作用域
使用 var 定义的变量只有两种作用域:全局和函数
而使用 let 定义的变量多了一种作用域:块级作用域
3. 暂时死区(TDZ)
在 var 声明变量之前使用该变量,会返回 undefined 而不是引用错误 ReferenceError
而在 let、const、class 声明变量之前,当前作用域开始到变量声明之间会出现暂时性死区
在这个区域内使用该变量,会抛出引用错误
详见 mdn 文档对于 变量提升 行为的详细说明
4. 重复声明
var 声明的变量可以被重复声明
let const 和 class 不可以
