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

Javascript 从性能角度看函数声明与表达式?,javascript,function,ecmascript-5,function-declaration,Javascript,Function,Ecmascript 5,Function Declaration,web上有许多javascript文章将函数声明function foo(){}与函数表达式var foo=function(){}进行比较。他们通常提到提升、条件内的行为等。。。但我不记得他们中有人在谈论性能。有什么区别吗?特别是在ECMA5的严格模式下(如果这改变了什么) 所谓性能,我当然指的是执行性能(包括查找、范围遍历等),而不是声明性能,尽管这也是一个好消息。函数声明在函数表达式可能被多次计算的情况下更快。例如,在循环中调用的代码中,挂起的函数只计算一次,但每次都会计算表达式。除此之外

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


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

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

每当您有关于JavaScript性能问题的问题时,我建议您检查一下。此外,谷歌还可以查看是否有人已经为您的问题制作了一个,在这种情况下,他们有:


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

function myfunc() {
  alert("yo");
}
myfunc();
Chrome:最快,FF:慢得多

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

myfunc();
FF:最快,克罗姆:慢多了

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

myfunc();

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

我今天和昨天都在谷歌上到处搜索,浏览了许多网络文章。然而不知何故,我完全忘记了检查jsperf。也谢谢你在回答中的简短总结+1,acceptedWell,循环中的函数声明将是一个语法错误,因此您实际上没有选择权。@bjortipling:,可能还有一个浏览器,它不知道我被测试中的“函数声明和表达式”弄糊涂了,直到我意识到它是一个糟糕的、被误解的命名函数表达式。。。“我所说的性能当然是指执行性能(包括查找、范围遍历等)”,没有。两个定义都创建了相同类型的函数对象。我唯一能想到的性能问题是在某些引擎中使用NFE-