如何让一个函数只调用一次?

时间:2013-07-16 11:51:40

标签: javascript jquery

此代码不断重复,但我希望它在函数调用之后发生两次,然后在设置的时间段后使用setTimeout

function alertit() {
     alert('code');
     setTimeout(alertit, 200);
}

alertit();

8 个答案:

答案 0 :(得分:3)

function alertit(callAgain) {
     alert('code');
     if (callAgain) setTimeout("alertit(false)", 200);
}

alertit(true);

答案 1 :(得分:2)

function alertit() {
     alert('code');
}

alertit();
setTimeout(alertit, 200);

例如。

答案 2 :(得分:2)

你能试试吗

function alertit(){

    // guard code
    if ( alertit.times == 2 ) return ; // for 4 times, alertit.times == 4  
    alertit.times = alertit.times ?  ++alertit.times: 1;

    // your function logic goes here ..   
    alert( 'here function called ' + alertit.times  );

    setTimeout( alertit , 1000 );
}

alertit();

答案 3 :(得分:1)

您可以在此处应用条件逻辑。

    var callfunc = true;
    function alertit() {
         alert('code');
      if(callfunc == true)
         setTimeout(function(){ callfunc = false; alertit();}, 200);
    }

    alertit();

答案 4 :(得分:1)

如果对setTimeout的调用必须在内部:

function alertit() {
  var f = function () {
    alert('code');
  }
  f();
  setTimeout(f, 200);
}

alertit();

答案 5 :(得分:1)

您可以使用两个标志来实现。 count将确保您的方法运行两次,执行标志只确保第一次设置超时。

var execute = true;
var count = 0;

function alertit() {
    if (count < 2) {
        alert('code');
        if (execute) {
            setTimeout(alertit, 200);
            execute = false;
        }
    }

}

alertit();

我看到我给了一个类似于tangelo的答案,它在简单,简单的步骤中做同样的事情。

答案 6 :(得分:1)

如果您对更通用的方法感兴趣,可以设置如下内容:

function callMultipleTimes(func, count, delay) {
    var key = setInterval(function(){
        if (--count <= 0) {
            clearInterval(key);
        }
        func();
    }, delay);
}

function alertit() {
     alert('code');
}

callMultipleTimes(alertit, 2, 200);

<强> FIDDLE

答案 7 :(得分:0)

创建一个全局变量调用它_Count = 0 并在函数alertit()中执行if条件,如果(_Count&lt;&gt; 1)调用该函数,然后如果该编码为真,则递增变量并调用函数...