为什么 JavaScript 会提升变量?
当他们决定实施吊装时,设计师的基本原理是什么?还有其他流行的语言可以做到这一点吗?
请提供文件和/或记录的相关链接。
为什么 JavaScript 会提升变量?
当他们决定实施吊装时,设计师的基本原理是什么?还有其他流行的语言可以做到这一点吗?
请提供文件和/或记录的相关链接。
正如 Stoyan Stefanov 在“JavaScript 模式”一书中所解释的,提升是 JavaScript 解释器实现的结果。
JS 代码解释分两遍执行。在第一次传递期间,解释器处理变量和函数声明。
第二遍是实际的代码执行步骤。解释器处理函数表达式和未声明的变量。
因此,我们可以使用“提升”的概念来描述这种行为。
“因此,var 提升是函数提升、没有块范围和 JS 作为 1995 年的紧急工作的 [an] 意外结果。”
“函数提升允许自上而下的程序分解,'let rec'免费,在声明之前调用;var提升标记。”
我不知道以相同方式提升变量的任何其他流行语言。我认为即使是 ActionScript(Flash 开发中使用的 ECMAScript 的另一种实现)也没有实现提升。对于熟悉学习 JavaScript 的其他语言的开发人员来说,这一直是困惑和沮丧的根源。
这是因为 javascript 解释器在两个周期内解释代码。
在第一个周期中,所有变量和函数声明都被带到它正在执行的函数范围的顶部。这有助于在函数执行之前创建函数variableObjects
。execution context
在第二阶段,赋值、代码语句和函数调用以预期的方式逐行进行。
你在这里有更详细的阅读 。
它将让您更好地了解和声明周围的行为let
,以及它在变量和函数之间遵循的优先级。const
class