自动提升会降低 JavaScript 的性能吗?

Sub*_*aik 4 javascript hoisting

最近,我正在研究 Javascript 中的 Scope。我想知道自动提升是在编译时完成还是在执行代码时(运行时)完成。如果它在运行时确实如此,那么我还有另一个问题,自动提升是否会降低 Javascript 程序的性能。

something = a(); 
function a(){
 console.log("hoisting");
 return 10;
}
var something; 
Run Code Online (Sandbox Code Playgroud)

是用人工吊装好还是自动吊装好?

Ban*_*mar 5

据我所知,不存在性能问题。初始化是在编译时完成的。所以无论你在顶部还是底部初始化,JS 引擎都会在编译时创建引用。

\n

\n

如果你忘记在底部初始化,它将按undefined默认初始化。因为提升它\xe2\x80\x99s被认为是声明functions或的一种做法variables在各自范围的顶部

\n

JavaScript:什么是提升?(受到推崇的)

\n


Fel*_*ing 5

把我的评论作为答案:

人们对提升的含义有不同的理解。事实是,根据规范,每次调用函数时都会创建一个新的执行上下文,其中包含一个新的环境。然后处理函数体以查找所有变量声明(var, let, const(和函数声明))并在新环境中创建这些名称的绑定。var声明用undefined. 然后身体被实际评估。

考虑到这一点,从引擎的角度来看,将var声明放在哪里并不重要,无论如何都必须处理整个主体。

话虽如此,如果实际实现没有缓存该信息,我会感到惊讶。毕竟,函数中的变量声明在函数调用之间不会改变。

  • 您的意思是因为算法的名称是“FunctionDeclarationInstantiation”?尽管有这个名称,但使用完全相同的算法来计算函数表达式的主体。 (2认同)