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

function declaration and function expression performance difference

我用过JSperf to test a small sample of code.

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

编辑: 我也明白他们两个的区别。请不要将此标记为 this 的副本或其他谈论语义差异的问题,不要回答我关于性能的问题。

谢谢。

随着 JavaScript 引擎最近使用的强大优化,像这样的微基准测试会产生一些误导性的结果。例如,我猜您要测量的是函数调用开销。但看起来你的代码是这样写的,你可能会(重新)定义函数定义 and/or 符号查找每执行 10 次它一次; 我猜这不是本意。

this alternative test中,我做了一些安排以避免函数的重复定义,并添加了一些其他调用函数的方式。这将性能差异降低到我认为主要由实验噪声决定的程度。虽然这有时可能会有明显的差异,但考虑到实验误差水平,我不会认为它们具有统计学意义。换句话说,它将比赛简化为虚拟平局。

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

I also understand the differences between both of them.

你也懂吗?

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