JavaScript中的时间死区(TDZ)和提升
💡
原文英文,约400词,阅读约需2分钟。
📝
内容提要
JavaScript中的TDZ和Hoisting是关于变量声明和访问的概念。TDZ是指进入作用域和变量声明之间的时间段,使用let、const和class声明的变量在初始化之前无法访问。Hoisting是变量和函数声明在编译阶段被移动到作用域顶部的行为。区别在于Hoisting将声明提升到作用域顶部,而TDZ发生在let、const和class中。
🎯
关键要点
- TDZ(时间死区)是指进入作用域和变量声明之间的时间段,使用let、const和class声明的变量在初始化之前无法访问。
- 在TDZ中,尝试访问未初始化的变量会导致ReferenceError。
- Hoisting(提升)是指变量和函数声明在编译阶段被移动到作用域顶部的行为,但只有声明被提升,初始化保持在原位置。
- 使用var声明的变量会被提升并初始化为undefined,而使用let和const声明的变量在提升后仍处于TDZ,直到初始化。
- 函数声明会被完全提升,可以在声明之前调用该函数。
- Hoisting将变量和函数声明提升到作用域顶部,而TDZ发生在let、const和class中,变量在提升后无法访问,直到初始化。
❓
延伸问答
什么是时间死区(TDZ)?
时间死区(TDZ)是指进入作用域和变量声明之间的时间段,在此期间使用let、const和class声明的变量在初始化之前无法访问。
在TDZ中访问未初始化的变量会发生什么?
在TDZ中,尝试访问未初始化的变量会导致ReferenceError。
提升(Hoisting)是什么?
提升(Hoisting)是指变量和函数声明在编译阶段被移动到作用域顶部的行为,但只有声明被提升,初始化保持在原位置。
使用var声明的变量在提升时会发生什么?
使用var声明的变量会被提升并初始化为undefined。
let和const声明的变量在提升后会有什么状态?
let和const声明的变量在提升后仍处于TDZ,直到初始化,无法访问。
函数声明的提升行为与变量有什么不同?
函数声明会被完全提升,可以在声明之前调用该函数,而变量声明则只提升声明部分。
🏷️
标签
➡️