如何只将该功能调用一次?
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
答案 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();