暂存性死区
暂存性死区是相对于某一个变量来说的,就是在定义该变量之前的区域就是暂存性死区
const i = 1
{
//死区开始
console.log(i) //死区里边拿不到外边的i,也拿不到本代码块内的i
//死区结束
const i = 2
console.log(i) //直到这里才能正常使用 i
}
来看以下几种情况:
情况一:代码块里边不存在 let i
let i = 0
{//这就是一个块的起始
console,log(i) //如果本块内没有定义 i ,根据作用域链,自然而然可以使用外边的i,此时输出0
}//块的结束
情况二:代码块里边存在 let i
let i = 0
{//这就是一个块的起始
let i = 1
console,log(i) //显然本代码块内定义了一个i, 所以不做过多解释,根据作用域链指定是输出 1
}//块的结束
情况三:代码块里边存在 let i ,但是在定义之前使用了i
let i = 0
{//这就是一个块的起始
console,log(i)
let i = 1
}//块的结束
错误类型如图:
总结:
出现本错误的原因就是由于暂存性死区:
- 只要我在本代码块内声明了 i,那就只能使用本代码块内声明的 i,哪怕在我定义之前使用了i也不能使用外边的i(霸道)
- let、const不存在变量提升(这也就导致程序会报错,而不输出undefined)