关于吊装:为什么JavaScript提升变量?

Why does JavaScript hoist variables?

为什么JavaScript提升变量?

设计师决定实施吊装时的理由是什么?
还有其他流行语言吗?

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


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

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

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

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


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

  • 代码完成/编译:
  • 代码执行:
  • 在第一个循环中,所有变量和函数声明都被带到它正在执行的函数作用域的顶部。这有助于在函数执行之前为execution context函数创建variableObjects

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

    你有一个更详细的阅读
    这里。

    它将为您提供围绕letconstclass声明的行为的更好的图像,以及变量和函数之间的优先级。