我正在处理一个顽固的API,我需要停止在第一次调用上执行的函数,然后在之后正常执行。
目前我这样做:
var counter = 0;
function notFirstTime() {
counter++;
if (counter > 2) {
return;
}
}
有更好的方法吗?
答案 0 :(得分:2)
你可以使用"返回功能"对于这种情况:
function skipFirstCall(fun) {
var first_called = true;
return function() {
if (!first_called) {
fun.apply(this, arguments);
}
first_called = false;
}
}
var myFunc = skipFirstCall(function(){
console.log("I was executed!");
});
myFunc();
myFunc(); // I was executed!
myFunc(); // I was executed!
myFunc(); // I was executed!
您可以将任何函数传递给skipFirstCall
函数作为参数,以跳过其第一个调用:
var myAnotherFunc = skipFirstCall(function(){
console.log("myAnotherFunc was executed!");
});
myAnotherFunc();
myAnotherFunc(); // myAnotherFunc was executed!
myAnotherFunc(); // myAnotherFunc was executed!
答案 1 :(得分:1)
是的!这是一个简单而优雅的解决方案 - 您可以在第一次通话时重新定义该功能,如下所示:
var foo = function() {
foo = function() {
console.log("i'm after the 1st call");
}
}
第一次调用foo()
时,它会重写foo
变量并将其设置为新函数。