var、let 与 const 的区别
1. 块级作用域
let
/const
:具有块级作用域(由{}
包裹的代码区域)var
:无块级作用域
解决的问题:
- 防止内层变量覆盖外层变量
- 避免循环计数变量泄露为全局变量
2. 变量提升
var
:存在变量提升(可先使用后声明,值为undefined
)let
/const
:无变量提升(必须先声明后使用)
3. 全局属性绑定
var
:自动成为全局对象属性(浏览器为window
,Node.js 为global
)let
/const
:不会绑定到全局对象
4. 重复声明
var
:允许重复声明,后者覆盖前者let
/const
:禁止重复声明同一变量
5. 暂时性死区
let
/const
:声明前不可访问(存在暂时性死区)var
:无暂时性死区
6. 初始值设置
var
/let
:可不设置初始值const
:必须初始化赋值
7. 指针指向
let
:可重新赋值const
:
- 基本类型:不可修改值
- 引用类型:不可修改指针,但可修改对象属性
代码示例:
// 块级作用域演示
{
var a = 1;
let b = 2;
}
console.log(a); // 1
console.log(b); // ReferenceError