2015-01-07 62 views
5

考虑看看代码传单API使用apply()vs call(),在这种情况下使用哪一个?

我的问题是,为什么wrapperFn.apply(context, args);fn.apply(context, args);使用适用(),而不是调用()。

你怎么知道使用哪一个?

困惑,因为我不知道我的传递函数是否使用数组。

 
limitExecByInterval: function (fn, time, context) { 
     var lock, execOnUnlock; 

     return function wrapperFn() { 
      var args = arguments; 

      if (lock) { 
       execOnUnlock = true; 
       return; 
      } 

      lock = true; 

      setTimeout(function() { 
       lock = false; 

       if (execOnUnlock) { 
        wrapperFn.apply(context, args); 
        execOnUnlock = false; 
       } 
      }, time); 

      fn.apply(context, args); 
     }; 
    }, 

+2

http://stackoverflow.com/questions/1986896/what -This-the-difference-between-call-and-apply – gaurav

+0

是应用使用数组,而调用使用列表(逗号分隔变量)。如果我在我的函数中传递参数列表,该怎么办?那么我应该使用call()? – airnet

回答

0

应用程序需要一个参数的单个数组,用于方法链接,相当于调用super的javascript。在Java中等等

function makeNoise() { 
    Foo.prototype.makeNoise.apply(this, arguments); 
} 

调用需要的参数,更加有用的其他情况下的参数仅作为单一变量列表。

fn.call(this, x, y, z); 

这也只是速记

fn.apply(this, [x, y, z]) 

鉴于你有你需要使用申请()参数数组

+0

但我不提前,如果我的传球功能是使用数组或不是?这就是为什么我很困惑 – airnet

+0

参数是一个内置的魔术变量,它是用当前函数调用的参数填充的,在你的代码中你将它保存为早先的参数。 – Adam

+0

啊谢谢..... – airnet

相关问题