Code前端首页关于Code前端联系我们

const 和 let 是变量提升吗?

terry 2年前 (2023-09-08) 阅读数 189 #Vue

每天盘点,坚持就是胜利!

    /**
        @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添加了变量声明方法constlet,并且在这两种声明方法声明的变量之前使用变量会导致错误:

console.log(a); // Uncaught ReferenceError: a is not defined
let a = 1;
 
这是否意味着 const 和 let 没有可变提升?其实并不是。
constlet实际上执行变量提升,但与var相比,它们只执行创建提升,而var同时执行创建和初始化提升,因此var中声明的变量位于之前对a的调用中undefined

三个(不足)

组织不到位,上面的文字没有解释为什么letcosnt没有变量促销。我将在查看信息后重建这篇文章。

四(延长线)

其他差异:

  1. 阴影可重复定义;
  2. 用var和let定义的变量可以重新赋值;
  3. const 和 let 具有块作用域;

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门