为什么在没有主人的情况下调用函数会变慢?

时间:2013-11-30 14:39:22

标签: javascript optimization jsperf

如果我执行以下操作:

  

var abs = Math.abs;

不要abs(-10)Math.abs(-10)快吗?因为abs是直接调用的。

这引起了我的注意: Math.abs vs custom abs function Result of a test done at jsperf.com

更新

在Internet Explorer 11中执行的相同测试显示了完全不同的结果: Result of a test done at jsperf.com

我推测这是由于对Chrome V8引擎内置功能的一些优化。

nnnnnn创建的测试,阐明了我想说的内容:Property shortcut Result of a test done at jsperf.com

1 个答案:

答案 0 :(得分:3)

Givi对此答案毫无用处。见评论。

在用户定义的对象中查找用户定义的函数比查找绑定到局部变量的函数要慢,所以你大多数都是正确的。

然而,查找Math.*函数更快,很可能是因为V8引擎的内部优化(因此局部变量中的“缓存”内置函数实际上较慢,而“缓存”用户定义功能更快。)

编辑:here's a jsperf演示Math.*函数如何比var x = Math.x对应函数更快,而对用户定义函数执行相同操作则不然。这就是V8如何运作imho。 test results

编辑#2:刚才我注意到你问题中的这一行:

  

我推测这是由于对内置的一些优化   功能在Chrome的V8引擎中。

我不是百分百肯定,但它看起来确实如此,是的。