JavaScript:var functionName = function() {}与function functionName() {}的性能表现对比

9

可能是重复问题:
使用匿名函数会影响性能吗?

在JavaScript中,使用函数表达式与声明对解析和运行时是否有性能影响(如果有)?

例如,以下两种方式的性能特征和差异是什么:

var functionOne = function() {
    // Some code
}

或者:

function functionTwo() {
    // Some code
}

注意:该问题不是关于声明函数是否更快,而是关于函数执行的问题。


我不知道。如果你真的在意,你应该进行实证研究,但我的猜测是没有区别的。 - Brian Donovan
3
请参见:使用匿名函数会影响性能吗?(简短回答:这取决于表达式的上下文情况)。 - Shog9
看一下这个 jsPerf:https://jsperf.com/anonymus-vs-declaration-vs-expression我在 Firefox 56、Chrome 62.0.3202 和 IE 11 上运行了它 - 在所有情况下,不同方法之间的性能差异都微不足道。 - Maz T
2个回答

13

与性能差异相比,这两者之间的语义差异更为重要。

  • 使用函数声明语句(第二个示例)声明的函数将在堆栈跟踪等中显示其名称。
  • 函数声明语句会被“提升”到其块的顶部,并解释为实际显示在其中任何其他语句之前运行。

在现代运行时环境中,性能差异可能非常微小,甚至无法检测到。


2
我知道语义差异更重要,但我想知道是否有任何性能影响。 这是否意味着在JavaScript内部进行的内存管理、分配等操作无论如何声明函数都是相同的? - user148273
Carakan至少在堆栈跟踪中提供其绑定的变量名称。 - gsnedders
已经过了几年,您可能需要重新表述一些内容,特别是“Function definition statements”,我认为您指的是函数声明。不确定“evaluated”是否合适,可能更好的是“processed”,因为对我来说,评估意味着运行某些东西。 - RobG
@RobG 谢谢。维护旧的SO答案不是我计划中的事情 :) - Pointy
@Pointy - 维护永远持续...;-) - RobG
显示剩余4条评论

10

无论如何,差异都是微不足道的。正如我在问题中所评论的那样,上下文才是最重要的:http://jsperf.com/fn-expression-vs-statement/3 - Shog9
是的,应该选择看起来更吸引人和易读的内容。 - Amjad Masad
1
有趣的是,在Firefox 37中,行为完全相反,但差异巨大。表达式执行了9.74亿次操作/秒,而声明(语句)仅执行了4百万次。 - Chris Middleton
1
最近在Chrome v55+中看到了巨大的变化。 - jfunk
不要相信这些人工微基准测试。 - Bergi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接