let能不能变量提升?

2022-01-20  本文已影响0人  JLong

答案是:可以的

let会造成变量提升(Hoisting),但是和var的提升不太一样,由于“暂时性死区”(temporal dead zone)的缘故,是不能被使用。

暂时性死区:在let声明之前的执行瞬间叫做暂时性死区,在此阶段引用任何后面才声明的变量都会抛出ReferenceError(引用错误)

总结:按照红宝书中所说结合ECMA262严格来讲let会进行变量提升,但只提升了创建阶段,由于暂时性死区的存在,此前还不能访问。冒然访问会抛出错误ReferenceError。而var的提升由于var的创建阶段与初始化阶段合二为一,直接进入赋值阶段,所以变量提升到当前作用域顶部,是可以访问的。

摘自:https://juejin.cn/post/7054205477571264549

上一篇 下一篇

猜你喜欢

热点阅读