122

为什么 JavaScript 会提升变量?

当他们决定实施吊装时,设计师的基本原理是什么?还有其他流行的语言可以做到这一点吗?

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

4

3 回答 3

59

正如 Stoyan Stefanov 在“JavaScript 模式”一书中所解释的,提升是 JavaScript 解释器实现的结果。

JS 代码解释分两遍执行。在第一次传递期间,解释器处理变量和函数声明。

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

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

于 2013-02-22T00:22:37.567 回答
31

JS 创造者 Brendan Eich曾经说过(在 Twitter 上)

“因此,var 提升是函数提升、没有块范围和 JS 作为 1995 年的紧急工作的 [an] 意外结果。”

他还解释说……</h2>

“函数提升允许自上而下的程序分解,'let rec'免费,在声明之前调用;var提升标记。”

布伦丹·艾希

还有其他流行的语言可以做到这一点吗?

我不知道以相同方式提升变量的任何其他流行语言。我认为即使是 ActionScript(Flash 开发中使用的 ECMAScript 的另一种实现)也没有实现提升。对于熟悉学习 JavaScript 的其他语言的开发人员来说,这一直是困惑和沮丧的根源。

于 2020-01-28T14:54:14.253 回答
3

这是因为 javascript 解释器在两个周期内解释代码。

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

在第一个周期中,所有变量和函数声明都被带到它正在执行的函数范围的顶部。这有助于在函数执行之前创建函数variableObjectsexecution context

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

你在这里有更详细的阅读

它将让您更好地了解和声明周围的行为let,以及它在变量和函数之间遵循的优先级。constclass

于 2019-03-02T13:50:10.703 回答