var和let和const
...大约 1 分钟
定义
- var定义的变量;
- let定义的变量;
- const定义的常量
作用域
- var作用域是整个封闭函数,是全域的;
- let作用域是在块级或者字块中;
- const跟let一样作用于块级作用域
变量提升
- 不论通过var声明的变量处于当前作用于的第几行,都会提升到作用域的最顶部;var完成了声明和初始化,初始化的值为undefined;function完成声明、初始化和赋值;
- 只要块级作用域内存在let,它所声明的变量就会绑定在这个区域,但是let声明的变量不会在顶部初始化,解析let那一行才初始化或者初始化和赋值,凡是在let声明之前使用该变量都会报错not defined,称为
暂时性死区
; - const没有变量提升,声明时必须初始化(赋值),重复声明会报错,声明的常量不可改变
重复声明
- 同一作用域内,var可以
- 同一作用域内,let不可以
- 同一作用域内,const不可以
内存分配
- var会先直接在栈内存分配内存空间,等执行实际语句的时候,再存储对应变量,如果是引用类型,那么会在堆内存开辟一个空间,栈内存指针指向堆内存;
- let不会预分配,而且会检查,相同变量名则报错;
- const也不会预分配,const不可修改,但可以修改对象里的属性
Powered by Waline v2.15.5