一、var 的特性(旧时代变量声明) 函数级作用域,块级作用域会变量泄露 存在变量提升,访问到 undefined 可重复声明、可重新赋值 全局声明会挂载到 window 示例代码 console.log(a); // undefined var a = 1; function fn() { var a = 2; console.log(a); // 2 } fn(); console.log(a); // 1 二、let 的特性(ES6 块级变量) 块级作用域,外部无法访问块内变量 存在变量提升,但有暂时性死区 TDZ 不可重复声明,可重新赋值 不会挂载到 window 示例代码 ...