为什么 JavaScript 会提升变量?
当设计者决定实施吊装时,他们的理由是什么? 还有其他流行语言能做到这一点吗?
请提供文件和/或记录的相关链接。
正如 Stoyan Stefanov 在《 JavaScript 模式》一书中解释的那样,提升是 JavaScript 解释器实现的结果。
JS 代码解释分两次执行,第一次解释处理变量和函数声明。
第二步是实际的代码执行步骤。解释器处理函数表达式和未声明的变量。
因此,我们可以使用“提升”的概念来描述这种行为。
这是因为 javascript 解释器在两个循环中解释代码。
在第一个循环中,所有的变量和函数声明都被放在它正在执行的函数范围的顶部。这有助于在函数的 execution context执行之前为它创建 variableObjects。
execution context
variableObjects
在第二阶段,值赋值、代码语句和函数调用以预期的方式逐行进行。
你还有更详细的资料要看 给你。
它将为您更好地描述 let、 const和 class声明的行为,以及它在变量和函数之间所遵循的优先级。
let
const
class
因此,var 提升是函数提升的意外结果,没有块作用域,[和] JS 是1995年的紧急任务。”
函数提升允许自顶向下的程序分解,‘ let rec’是免费的,在声明前调用; var 提升随后进行
我不知道还有哪种流行语言能以同样的方式提升变量。我认为甚至 ActionScript ーー Flash 开发中使用的另一个 ECMAScript 实现ーー也没有实现吊装。对于正在学习 JavaScript 的熟悉其他语言的开发人员来说,这是一个困惑和沮丧的来源。