# var
- var有变量提升
- var的变量提升只是提升声明,还是要等执行到对应行才赋值
- var不会创建块级作用域
- var声明的全局变量会挂载到window上去
1
2
3
4
经典问题
解决方法1
解决方法2
- 变量提升
console.log(a); // undefined console.log(b); // 报错 var a;
复制成功
1
2
3
4
2
3
4
# 缺陷解决
- 由于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
变量可更改
有块级作用域
不可重复声明
作用域链
let a = 1; a = 2; console.log(a); // 2
复制成功
1
2
3
2
3
# const
- 规则与let基本一致
- 特点:设置后不可更改
const a = 1; a = 2; // 报错
复制成功
1
2
2
# 其他声明
function
class
import
- function 也是声明了一个变量
funciton a() {} let a = 1; // 报错,说明已存在这个变量
复制成功
1
2
2
v1.4.16