最优雅的方式来阻止第一次通话时执行的功能?

时间:2016-03-16 13:29:52

标签: javascript loops iterator

我正在处理一个顽固的API,我需要停止在第一次调用上执行的函数,然后在之后正常执行。

目前我这样做:

var counter = 0;

function notFirstTime() {
    counter++;
    if (counter > 2) {
        return;
    }
}

有更好的方法吗?

2 个答案:

答案 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变量并将其设置为新函数。