簡體   English   中英

如何只調用一次函數?

[英]How to call function only once?

我怎么只能調用一次函數?

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

嘗試這個:

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

在運行函數時將一些goobal變量存儲為一個標志,並在函數啟動時檢查該變量。

設置一個標志,並根據該標志進行調用:

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

在非常奇怪的情況下,最簡單的方法是設置一個布爾值:

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

使用標記的其他建議很好,但是我會將其構建為函數裝飾器,可以將其應用於任何函數。 您可以通過這種方式避免使用全局變量,並且代碼變得更具可讀性和可重用性:

// 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM