自动提升会降低 JavaScript 的性能吗?
Does automatically hoisting slow down the performance of JavaScript?
最近在Javascript学习Scope。我想知道自动提升是在编译时完成还是在执行代码时(运行时)完成。如果它在 运行 时间出现,那么我还有一个问题,自动提升是否会降低 Javascript 程序的性能。
something = a();
function a(){
console.log("hoisting");
return 10;
}
var something;
我们应该使用手动吊装还是自动吊装更好?
据我所知,没有性能问题。初始化在编译时完成。所以无论你在顶部还是底部初始化,JS引擎都会在编译时创建引用。
但是
如果底部忘记初始化,默认会初始化为undefined
。由于提升,在各自范围的顶部声明 functions
或 variables
被认为是一种做法。
运行 时未完成。
它在编译过程中。
所以它不会降低性能。
就在代码执行之前,编译器扫描所有变量和函数声明并将它们分配到内存中。
将我的评论作为答案:
人们对提升的含义有不同的理解。事实是,根据规范,每次 调用一个函数都会创建一个新的执行上下文,其中包含一个新的环境。然后 the function body is processed 查找所有变量声明(var
、let
、const
(和函数声明))并在新环境中创建这些名称的绑定。 var
声明用 undefined
初始化。然后 body 实际上被评估了。
考虑到这一点,从引擎的角度来看,将 var
声明放在哪里并不重要,无论如何都必须处理整个 body。
话虽如此,如果实际实现不缓存该信息,我会感到惊讶。毕竟,函数中的变量声明在函数调用之间不会改变。
最近在Javascript学习Scope。我想知道自动提升是在编译时完成还是在执行代码时(运行时)完成。如果它在 运行 时间出现,那么我还有一个问题,自动提升是否会降低 Javascript 程序的性能。
something = a();
function a(){
console.log("hoisting");
return 10;
}
var something;
我们应该使用手动吊装还是自动吊装更好?
据我所知,没有性能问题。初始化在编译时完成。所以无论你在顶部还是底部初始化,JS引擎都会在编译时创建引用。
但是
如果底部忘记初始化,默认会初始化为undefined
。由于提升,在各自范围的顶部声明 functions
或 variables
被认为是一种做法。
运行 时未完成。 它在编译过程中。 所以它不会降低性能。 就在代码执行之前,编译器扫描所有变量和函数声明并将它们分配到内存中。
将我的评论作为答案:
人们对提升的含义有不同的理解。事实是,根据规范,每次 调用一个函数都会创建一个新的执行上下文,其中包含一个新的环境。然后 the function body is processed 查找所有变量声明(var
、let
、const
(和函数声明))并在新环境中创建这些名称的绑定。 var
声明用 undefined
初始化。然后 body 实际上被评估了。
考虑到这一点,从引擎的角度来看,将 var
声明放在哪里并不重要,无论如何都必须处理整个 body。
话虽如此,如果实际实现不缓存该信息,我会感到惊讶。毕竟,函数中的变量声明在函数调用之间不会改变。