# var
- var有变量提升
- var的变量提升只是提升声明,还是要等执行到对应行才赋值
- var不会创建块级作用域
- var声明的全局变量会挂载到window上去
# 缺陷解决
- 由于var关键字的缺陷,引入了let/const关键字
- 解var无决块级作用域问题,let/const 有
- 解决变量提升问题,设置了一个
变量死区
变量死区
- var 提升了声明,且可以访问到,只不过到对应行才进行赋值
- let 也提升了变量声明,但是不让访问,放在变量死区里面
/**
* 报错:ReferenceError: Cannot access 'a' before initialization
* 说明知道有这个变量了,但是还不让访问
*/
console.log(a);
let a = 0;
1
2
3
4
5
6
2
3
4
5
6
# let
# const
- 规则与let基本一致
- 特点:设置后不可更改
const a = 1;
a = 2; // 报错
1
2
2