为什么 JavaScript 会提升变量?

为什么 JavaScript 会提升变量?

当设计者决定实施吊装时,他们的理由是什么? 还有其他流行语言能做到这一点吗?

请提供文件和/或记录的相关链接。

12540 次浏览

正如 Stoyan Stefanov 在《 JavaScript 模式》一书中解释的那样,提升是 JavaScript 解释器实现的结果。

JS 代码解释分两次执行,第一次解释处理变量和函数声明。

第二步是实际的代码执行步骤。解释器处理函数表达式和未声明的变量。

因此,我们可以使用“提升”的概念来描述这种行为。

这是因为 javascript 解释器在两个循环中解释代码。

  1. 代码完成/编译:
  2. 代码执行:

在第一个循环中,所有的变量和函数声明都被放在它正在执行的函数范围的顶部。这有助于在函数的 execution context执行之前为它创建 variableObjects

在第二阶段,值赋值、代码语句和函数调用以预期的方式逐行进行。

你还有更详细的资料要看 给你。

它将为您更好地描述 letconstclass声明的行为,以及它在变量和函数之间所遵循的优先级。

JS 创始人布兰登 · 艾希(Brendan Eich):

因此,var 提升是函数提升的意外结果,没有块作用域,[和] JS 是1995年的紧急任务。”

他还解释说..。

函数提升允许自顶向下的程序分解,‘ let rec’是免费的,在声明前调用; var 提升随后进行

Brendan Eich

还有其他流行语言能做到这一点吗?

我不知道还有哪种流行语言能以同样的方式提升变量。我认为甚至 ActionScript ーー Flash 开发中使用的另一个 ECMAScript 实现ーー也没有实现吊装。对于正在学习 JavaScript 的熟悉其他语言的开发人员来说,这是一个困惑和沮丧的来源。