每天做个总结吧,坚持就是胜利!
/**
@date 2021-05-27
@description const和let到底存不存在变量提升?
*/
复制代码
壹(序)
面试中很常见的一个问题就是var,cosnt,let三者之间的区别
,大部分答案会提到一个区别是:var存在变量提升,而const和let不存在变量提升;但在我的认知中,cosnt和let也是存在变量提升的,只是和var的变量提升有所不同。
贰(解释)
什么是变量提升?
js代码在运行的时候,分为编译阶段和执行阶段,其中变量提升就是发生在编译阶段,指的是在编译过程中,会去把变量的声明部分提升
到代码顶部,比如:
// 正常代码
.
.
.
var a = 1;
.
.
// 变量提升后
var a;
.
.
.
a = 1;
.
.
复制代码
所以在var a = 1;
之前使用a
,也是可以的,只是值为undefined
console.log(a); // undefined
var a = 1;
复制代码
很显然,以上过程,是一个让人难以理解的:为什么我能在变量声明之前使用该变量?所以ES6
为了纠正这个不合逻辑的现象,增加了const
和let
变量声明方式,并且在这两种声明方式声明的变量之前使用变量,是会报错的:
console.log(a); // Uncaught ReferenceError: a is not defined
let a = 1;
复制代码
那么这是不是就说明const和let就不存在变量提升呢?其实不然。
const
和let
其实是会进行变量提升的,只是他们相对于var
来说,只进行了创建的提升,而var
进行了创建和初始化的提升,所以var声明的变量在之前调用是一个undefined
。
叁(不足)
整理很不到位,并不能从以上篇幅清楚的看出为什么let
和cosnt
不存在变量提升,之后查阅资料后再重构一下文章。
肆(引申)
其他区别:
- var可以重复定义;
- var和let定义的变量可以重新赋值;
- const和let有块级作用域;
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END