var
- 存在变量提升
- 可重复声明,声明后可修改值
- 一般不支持块级作用域(函数支持)
- 支持循环
let
- 有暂时死区,没有变量提升
- 不可重复声明,声明后可修改值
- 支持块级作用域
- 支持循环
const
- 有暂时死区,没有变量提升
- 不可重复声明
- 声明的基本数据类型不可改,引用类型可改属性,不可只声明变量而不赋值
- 支持块级作用域
- 不支持循环
var let const的区别
修改 const 声明的值
// 对象
const obj = { a: 1 };
obj.a = 2;
// 数组
const arr = [1, 2];
arr[0] = 2;
变量提升
var fun = function () {
console.log(1);
};
function fun() {
console.log(2);
};
fun(); // 1
暂时性死区(TEMPORAL DEAD ZONE)
- ES6 对变量声明的规定中,在 let / const 用函数默认变量时,未完全初始化前的区域,称为暂存死区。
关键字声明后的报错
- TDZ 报错:
Uncaught ReferenceError: Cannot access 'a' before initialization
console.log(a); // undefined
var a = 1;
console.log(a); // 报错
let a = 1;
console.log(b); // 报错
const b = 1;
网友评论