答案是:可以的
let会造成变量提升(Hoisting),但是和var的提升不太一样,由于“暂时性死区”(temporal dead zone)的缘故,是不能被使用。
暂时性死区:在let声明之前的执行瞬间叫做暂时性死区,在此阶段引用任何后面才声明的变量都会抛出ReferenceError(引用错误)
总结:按照红宝书中所说结合ECMA262严格来讲let会进行变量提升,但只提升了创建阶段,由于暂时性死区的存在,此前还不能访问。冒然访问会抛出错误ReferenceError。而var的提升由于var的创建阶段与初始化阶段合二为一,直接进入赋值阶段,所以变量提升到当前作用域顶部,是可以访问的。
摘自:https://juejin.cn/post/7054205477571264549
网友评论