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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值