没个十年的阅历,就搞不定这个暂时性死区的问题

62 阅读1分钟

对应视频 www.douyin.com/user/self?m…

问题

这是群里的同学提到的问题,问什么在js中的错误和控制台中不一样? 解析规则的改变,或者说暂时性死区的问题

Js 中实现,报错

控制台中实现,报错

解析

假设以下代码进行执行,此时 a是否在作用域中存在,是否可以访问,初始化或重新定义?


console.log(a)
let a = 10

function b(){
    eval()
    debugger
}

存在脚本作用域当中,无法访问,初始化或重新定义,此处可以使用eval进行查看

image.png

image.png 问题就出现在无法访问,初始化或重新定义上,对于脚本而言,这个问题出现了,解决就是,通常不会出现问题,但如果这个逻辑传递到控制台,性质就不一样了 比如我们使用了Map等初始化时可能会报错的初始化函数【只要报错就行,通常是属性初始化】 image.png

此时,按照通用规则,就会出现 无法访问

无法初始化 和无法重新定义的问题

image.png 这三个问题就形成了当前let/const刚出来的烂事,控制台里不能使用let/const

不过现在解决了,控制台里可以重新定义

但同样也会遇见刚开头遇见的问题,他们的解析规则发生了改变,报的错也就不一样了