Javascript:使用apply方法

时间:2015-12-18 00:08:25

标签: javascript apply

这是我的代码:

var add = function(x,y) {
  console.log(x + y);
}


var delay = function(func, wait) {
  var inner = function() {
    return setTimeout(function() {
      return func.apply(inner, arguments);
    }, wait);
  }
  return inner;
};

var delayAdd = delay(add, 500);

delayAdd(100,200); //should log 300 to console after 500ms
                   //instead, it logs NaN

我怀疑问题出在第9行:return func.apply(inner, arguments); 我的意图是add调用inner中的参数,这些参数在最后一行delayAdd(100,200)中定义。但是,这似乎并没有发生。为什么会这样,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

arguments关键字特定于其引用的范围。实际上,您从setTimeout函数传递参数。您需要做的是从您想要的范围保存引用,并传递:

   var inner = function() {
      var args = arguments;
      return setTimeout(function() {
         return func.apply(inner, args);
         ...