ES6的let到底存不存在变量提升

6 篇文章 0 订阅

        关于ES6中的let存不存在变量提升的问题,我想大部分人都认为是不存在变量提升的,而官方文档关于这点也曾做过改动,最初是认为存在变量提升,后来又改成了不存在变量提升。而最近我在CSDN上看到一篇文章在探讨这个问题,于是自己就试验了一下。实践是检验真理的唯一标准,那么今天我们就来探讨一下到底let存不存在变量提升的问题。

变量提升

        定义:函数声明和变量声明总是被JavaScript解释器隐式地提升(hoist)到包含他们的作用域的最顶端。

        通过定义我们可以知道,只有变量的声明和函数的声明存在变量提升这一说,那么在ES6出现之前,JavaScript声明变量的方式是通过关键字var实现的,声明函数自然通过function啦,ES6中我们用let,const来声明变量和常量。

        话不多说,直接上一段代码:

    {
      console.log(a) // 报错,a is not defined
      let a=2;
    }

        这和官方文档所说的存在暂时性死区是一致的。

        如果let存在变量提升,那么上述代码就相当于下面这样

    {
      let a;
      console.log(a) //undefined
      a=2;
    }

        由此可见,let并不存在变量提升。此外,ES6新增了块级作用域的概念,块级作用域简单的来说就是用{}包裹起来的就是块级作用域。不妨再来看一个例子:

{
   let a =11;
   console.log(a); //11
}
console.log(a); //报错,a is not defined

    因此,我们可以得出结论,let声明的变量不能跨块访问。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值