运行一次函数时NaN

时间:2016-02-25 21:27:26

标签: javascript callback

我已经创建了一个用于执行一次函数的函数,并且对调用函数的任何将来调用都将作为第一次调用。

once = function(fun){
  var beenCalled = false;
  var answer;
  return function() {
    if (beenCalled === true) {
      return answer;
    } else {
      beenCalled = true;
      answer = fun();
      return answer;
    }
  }
};

var add = once(function(x,y,z) {
      return x + y + z;
});

console.log(add(1,2,3));
console.log(add(4,5,6));

我期待控制台记录'6'和'6',而不是记录'Nan'和'NaN',我不知道为什么。我很确定问题是'answer = fun();'但是我不太确定是什么。

2 个答案:

答案 0 :(得分:4)

当你致电fun时,你必须传递给你的论据。

once = function(fun){
  var beenCalled = false;
  var answer;
  return function() {
    if (beenCalled === true) {
      return answer;
    } else {
      beenCalled = true;
      answer = fun.apply(null, arguments);
      return answer;
    }
  }
};

var add = once(function(x,y,z) {
      return x + y + z;
});

console.log(add(1,2,3));
console.log(add(4,5,6));

答案 1 :(得分:0)

您忘记将您的论据传递给fun。我使用applyarguments传递所有参数。



once = function(fun){
  var beenCalled = false;
  var answer;
  return function() {
    if (beenCalled === true) {
      return answer;
    } else {
      beenCalled = true;
      answer = fun.apply(this, arguments);
      return answer;
    }
  }
};

var add = once(function(x,y,z) {
      return x + y + z;
});

console.log(add(1,2,3));
console.log(add(4,5,6));