我试图创建一个函数,它接受另一个函数作为参数,并创建一个只能被调用一次的新版本的回调函数。如果是初始调用,后续调用将返回输出。
这就是重新创建Underscore .once方法。
这是我到目前为止所拥有的。我创建了chargeCreditCard函数。我想创建一个只能调用一次的函数的新版本(chargeOnce)。感谢解释。感谢。
编辑。我希望once函数不依赖于函数外部的任何代码(即外部计数器变量)。
var chargeCreditCard = function(num, price){
return num*price;
};
function once (func) {
var hasActionBeenCalled = false;
var call = function () {
if(!hasActionBeenCalled) {
hasActionBeenCalled = true;
func;
}
}
}
var chargeOnce = once(chargeCreditCard);
console.log(chargeOnce(2,3));
console.log(chargeOnce(4,5));
答案 0 :(得分:1)
您的函数once
不会返回任何内容,而您的函数call
不会调用任何内容。做到这一点
function once(func) {
var hasActionBeenCalled = false;
return function() {
if (!hasActionBeenCalled) {
hasActionBeenCalled = true;
return func.apply(this, arguments);
}
}
}
对于垃圾收集,我建议做
function once(func) {
var res;
return function() {
if (typeof func == "function") {
res = func.apply(this, arguments);
func = null; // unset func
}
return res;
}
}