【发布时间】:2011-05-26 15:34:02
【问题描述】:
各位,我想要这个问题的理论答案。
我想知道调用 f.call(null,x) 是否比调用 f(x) 慢?
【问题讨论】:
各位,我想要这个问题的理论答案。
我想知道调用 f.call(null,x) 是否比调用 f(x) 慢?
【问题讨论】:
作为this test shows,直接执行函数,获胜。
function foo(x) {
for (var i = 0; i < 100; i++);
}
// Tests
foo('Bob');
foo.call(null, 'Fish');
foo.call(window, 'Cowboy!');
【讨论】:
是的,由于添加了属性查找(在函数 f 上查找成员 call),它会稍微慢一些。这在很大程度上是一种微优化,而不应该让您在必要时使用call()。
另一方面,我注意到在大多数浏览器中,使用bind() 创建的函数比未绑定的函数慢,也比使用call() 慢。以防万一您认为这可能是解决任何性能缺陷的方法。
请注意,有人已经为此 over at http://jsperf.com 设置了一些测试。
【讨论】:
call() 不同。
Function.prototype.call 或f.call。因此,JS 运行时需要检查是否有 call 的覆盖值。