【问题标题】:f.call(null,x) vs f(x) speedf.call(null,x) vs f(x) 速度
【发布时间】:2011-05-26 15:34:02
【问题描述】:

各位,我想要这个问题的理论答案。

我想知道调用 f.call(null,x) 是否比调用 f(x) 慢?

【问题讨论】:

    标签: javascript web-services


    【解决方案1】:

    作为this test shows,直接执行函数,获胜。

     function foo(x) {
      for (var i = 0; i < 100; i++);
     }
    
     // Tests
     foo('Bob');
     foo.call(null, 'Fish');
     foo.call(window, 'Cowboy!');
    

    【讨论】:

      【解决方案2】:

      是的,由于添加了属性查找(在函数 f 上查找成员 call),它会稍微慢一些。这在很大程度上是一种微优化,而不应该让您在必要时使用call()

      另一方面,我注意到在大多数浏览器中,使用bind() 创建的函数比未绑定的函数慢,也比使用call() 慢。以防万一您认为这可能是解决任何性能缺陷的方法。

      请注意,有人已经为此 over at http://jsperf.com 设置了一些测试。

      【讨论】:

      • 不是 f(x) 只是 f.call(this,x) 的语法糖还是我弄错了?
      • @Pacerier 不,它不是语法糖。两者都执行称为 Call 的内部函数,它与 call() 不同。
      • @Pacerier:不会。它们可能会导致调用的实现中的内部代码相同,但是JS端的设置更长。见jsfiddle.net/FAHfq
      • @Pacerier:您可以随意覆盖Function.prototype.callf.call。因此,JS 运行时需要检查是否有 call 的覆盖值。
      • @kassens 所以不能修改 f(x) 的行为?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2014-03-14
      相关资源
      最近更新 更多