如果我执行以下操作:
var abs = Math.abs;
不abs(-10)
应该比 快Math.abs(-10)
吗?因为 abs 是直接调用的。
这引起了我的注意: Math.abs vs custom abs function
更新:
在 Internet Explorer 11 中执行的相同测试显示了完全不同的结果:
我推测这是由于对 Chrome 的 V8 引擎中的内置函数进行了一些优化。
如果我执行以下操作:
var abs = Math.abs;
不abs(-10)
应该比 快Math.abs(-10)
吗?因为 abs 是直接调用的。
这引起了我的注意: Math.abs vs custom abs function
更新:
在 Internet Explorer 11 中执行的相同测试显示了完全不同的结果:
我推测这是由于对 Chrome 的 V8 引擎中的内置函数进行了一些优化。
Givi 使这个答案变得毫无用处。看评论。
在用户定义的对象中查找用户定义的函数比查找绑定到局部变量的函数要慢,所以您基本上是对的。
但是,查找Math.*
函数更快,很可能是因为 V8 引擎的内部优化(因此在局部变量中“缓存”内置函数实际上更慢,而“缓存”用户定义的函数更快)。
编辑:这是一个 jsperf,演示了Math.*
函数如何比它们的var x = Math.x
对应函数更快,而对用户定义的函数执行相同的操作则不然。恕我直言,这就是 V8 的工作方式。
编辑#2:刚才我从你的问题中注意到了这一行:
我推测这是由于对 Chrome 的 V8 引擎中的内置功能进行了一些优化。
我不是 100% 确定,但肯定是这样的,是的。