从性能的角度来看,函数声明与表达式

Function declaration vs expression from a performance point of view?

本文关键字:函数 声明 表达式 性能      更新时间:2023-09-26

网络上有许多JavaScript文章将函数声明function foo (){}与函数表达式var foo = function () {}进行比较。他们通常会提到诸如吊装、条件内的行为等......但我不记得他们中的任何一个人谈论过性能。有什么区别吗?特别是在ECMA5的严格模式下(如果这改变了什么)。

我所说的性能当然是指执行性能(包括查找、作用域遍历等),而不是声明性能,尽管这也是一个很好的知识。

在函数表达式可能被多次计算的情况下,函数声明速度更快。例如,在循环中调用的代码中,提升的函数仅计算一次,但每次都会计算表达式。除此之外,没有有意义的区别。

每当你对JavaScript性能问题有疑问时,我建议你查看JSPerf。另外,谷歌看看是否有人已经为您的问题制作了一个,在这种情况下,他们有:

http://jsperf.com/function-declaration-vs-function-expression/15

我在Chrome Canary 45和Firefox 37中从JSPerf执行了相同的测试,可悲的是结果相反:

function myfunc() {
  alert("yo");
}
myfunc();

铬:最快,FF:慢得多

var myfunc = function() {
    alert("yo");
    }
myfunc();

FF:最快,克罗姆:慢得多

所以,答案是:这取决于浏览器/JS引擎。