const、let声明的变量会被提升吗

const、let是ES6的新特性,可以声明块级作用域

  • 到底会不会声明被提升,现在说法不一
  • 个人认为也不会被提升,但是和var一样不能先使用再声明
  • var 声明的变量会被提升到顶部,再赋值
    console.log(a) 
    var a = 1
    // undefined
    
  • const、let会在声明地方到块级顶部形成临时性死区,在这区间使用该变量都会被报错
    console.log(a)
    let a = 1
    // VM92:1 Uncaught SyntaxError: Identifier 'a' has already been declared
    
    ES6规定如果块内存在let命令,那么这个块就会成为一个封闭的作用域,并要求const、let变量先声明才能使用,如果在声明之前就开始使用,它并不会引用外部的变量。
  • 用法总结
    const一般用来声明常量,且声明的常量是不允许改变的,只读属性,因此就要在声明的同时赋值。const与let一样,都是块级作用域,存在暂时性死区,不存在变量声明提前,不允许重复定义,不会成为全局对象的一个属性。

更新

const、let会不会被提升,我犹豫了

提升 — 关键是怎么定义提升的
要理解提升的定义,还需要搞懂js变量的执行过程

js变量的执行过程包括

创建 =》初始化 =》 赋值

var 声明的变量执行过程

找到当前作用域中所有var声明的变量,创建变量 =》初始化为 undefined =**执行代码** =》 赋值

function 声明的变量执行过程

找到当前作用域中所有function声明的变量,创建变量 =》初始化 =》赋值 =**执行代码**

let 声明的变量执行过程

找到当前作用域中所有let声明的变量,创建变量 =**执行代码** =》初始化为let声明的值,没有就为undefined  =》 赋值(修改值)

const 声明的变量执行过程

找到当前作用域中所有let声明的变量,创建变量 =**执行代码** =》初始化为let声明的值,没有就为undefined

const 没有赋值过程

有没有被提升,主要看代码执行的时机

  • let 的「创建」过程被提升了,但是初始化没有提升。
  • var 的「创建」和「初始化」都被提升了。
  • function 的「创建」「初始化」和「赋值」都被提升了。

深入了解,请参考https://zhuanlan.zhihu.com/p/28140450

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页