函数声明和函数表达性能差异

时间:2017-05-17 11:25:03

标签: javascript function jsperf function-expression

我使用JSperf来测试code的一小部分样本。

enter image description here

根据我遇到的一些文章,两者都应该有类似的性能,test2有一点优势。但在这里完全相反。有人可以解释为什么会有巨大的差异吗?

编辑:我也理解他们两者之间的差异。请不要将此标记为this的副本或其他有关语义差异的问题,并且不回答有关性能的问题。

谢谢。

2 个答案:

答案 0 :(得分:2)

随着JavaScript引擎目前正在使用强大的优化功能,像这样的微基准测试产生了一些误导性的结果。例如,我猜测你要测量的是函数调用开销。但它看起来像你的代码编写方式,你可能(重新)定义函数定义和/或符号查找每10次执行一次; 我猜这不是意图。

this alternative test中,我安排了一些事情以避免重复定义函数,并添加了一些其他调用函数的方法。这减少了我认为由实验噪声主导的性能差异。虽然这有时可能会有明显的差异,但鉴于实验误差水平,我不会认为它们具有统计学意义。换句话说,它将比赛简化为虚拟领带。

即使在方法之间存在一致差异的浏览器中,在局部变量中缓存函数似乎也可以最大限度地减少定义和表达式之间的差异。

答案 1 :(得分:1)

  

我也理解他们两者之间的差异。

您是否也了解these semantic differences

请注意,jsPerf会将您的代码置于一个紧密循环中,其执行时间将被测量。函数声明需要为每次迭代创建块范围,这会大大减慢测试速度。这几乎不是你想要衡量的。