ES6的let到底存不存在变量提升
前言
关于ES6中的let存不存在变量提升的问题,我想大部分人都认为是不存在变量提升的,而官方文档关于这点也曾做过改动,最初是认为存在变量提升,后来又改成了不存在变量提升。而最近我在CSDN上看到一篇文章在探讨这个问题,于是自己就试验了一下。实践是检验真理的唯一标准,那么今天我们就来探讨一下到底let存不存在变量提升的问题。
变量提升
定义:函数声明和变量声明总是被JavaScript解释器隐式地提升(hoist)到包含他们的作用域的最顶端。
通过定义我们可以知道,只有变量的声明和函数的声明存在变量提升这一说,那么在ES6出现之前,JavaScript声明变量的方式是通过关键字var实现的,声明函数自然通过function啦,ES6中我们用let,const来声明变量和常量。
话不多说,直接上一段代码: { console.log(a) // 报错,a is not defined let a=2; }
这和官方文档所说的存在暂时性死区是一致的。
如果let存在变量提升,那么上述代码就相当于下面这样
1 | { let a; console.log(a) //undefined a=2; }``` |
{ let a =11; console.log(a); //11 }```
console.log(a); //报错,a is not defined
因此,我们可以得出结论,let声明的变量不能跨块访问。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 webRambler-blog!
评论