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,直到初始化,无法访问。

函数声明的提升行为与变量有什么不同?

函数声明会被完全提升,可以在声明之前调用该函数,而变量声明则只提升声明部分。

➡️

继续阅读