每天盘点,坚持就是胜利!
/**
@date 2021-05-27
@description const和let到底存不存在变量提升?
*/
一(介词)
一个非常常见的面试问题是var,cosnt,let三者之间的区别
。大多数答案都提到了区别:var 有变量提升,而 const 和 let 没有变量提升;但根据我的理解, cosnt 和 let 也有变量提升,但和变量提升不同。
二(说明)
什么是可变举升?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中声明的变量位于之前对a的调用中undefined
。
三个(不足)
组织不到位,上面的文字没有解释为什么let
和cosnt
没有变量促销。我将在查看信息后重建这篇文章。
四(延长线)
其他差异:
- 阴影可重复定义;
- 用var和let定义的变量可以重新赋值;
- const 和 let 具有块作用域;
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。