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

Function declaration vs expression from a performance point of view?

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

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

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

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

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

我在 Chrome Canary 45 和 Firefox 37 中执行了来自 JSPerf 的相同测试,遗憾的是结果相反:

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

Chrome:最快,FF:慢得多

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

myfunc();

FF:最快,Crome:慢得多

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