我已经创建了一个用于执行一次函数的函数,并且对调用函数的任何将来调用都将作为第一次调用。
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();'但是我不太确定是什么。
答案 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
。我使用apply
和arguments
传递所有参数。
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));