[英]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.