一个函数,它接受一个回调并创建一个只能被调用一次的新版本的回调。使用Javascript

时间:2014-11-18 18:43:36

标签: javascript callback underscore.js

我试图创建一个函数,它接受另一个函数作为参数,并创建一个只能被调用一次的新版本的回调函数。如果是初始调用,后续调用将返回输出。

这就是重新创建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));

1 个答案:

答案 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;
    }
}