如何只调用一次函数?

时间:2014-02-07 04:53:45

标签: javascript jquery

如何只将该功能调用一次?

var myFunction = function () {
    alert("calling function only for once");
}
myFunction();//alert "calling function only for once"
myFunction();//should not alert // if I call multiple times this should not be called

5 个答案:

答案 0 :(得分:4)

试试这个:

var myFunction = function () {
    alert("calling function only for once");
    myFunction = function(){
        return false;
    }
}
myFunction();//alert "calling function only for once"
myFunction();//should not alert

答案 1 :(得分:2)

运行函数时将一些全局变量存储为标志,并在函数开头检查该变量。

答案 2 :(得分:1)

设置一个标志,并根据该标志调用:

var IsAlreadyCalled=false;
var myFunction = function () {
   if(!IsAlreadyCalled){
      alert("calling function only for once");
      IsAlreadyCalled = true;
   }
}
myFunction();//alert "calling function only for once"
myFunction();//should not alert

答案 3 :(得分:1)

在非常奇怪的场景中,最简单的方法是设置布尔值:

var run = true,
    myFunction = function(){
        if(run){
            alert('calling function only for once');
            run = false;
        } else {
            return false;
        }
    };

myFunction(); // will run
myFunction(); // won't run

稍后如果您需要“重新激活”它,您可以将布尔值设置为true并再次调用它。

run = true;
myFunction(); // will run again

答案 4 :(得分:0)

使用标志的其他建议很好,但我会将其构建为函数装饰器,您可以将其应用于任何函数。您可以通过这种方式避免全局变量,并且您的代码变得更具可读性和可重用性:

// Takes a function and returns a function
// that executes only once
function once(f) {
  var flag;
  return function() {
    if (!flag) {
      flag = true;
      return f.apply(this, arguments);
    }
  };
}

var fn = once(function() {
  console.log('logged!');
});

fn(); // logged!
fn();
fn();

演示: http://jsbin.com/povu/1/edit