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