Call A Function Only If It Hasn't Been Called / Run A Function Only Once
Solution 1:
Take a look at the once
function from underscore.js - linked here.
Essentially, you wrap the function in another one that has a flag variable inside it. Call the function if the flag is unset and set the flag when you call it.
_.once = function(func) {
var ran = false, memo;
returnfunction() {
if (ran) return memo;
ran = true;
memo = func.apply(this, arguments);
func = null;
return memo;
};
};
If you don't want to add underscore to your website (I think that's the first thing you should do when starting any website, but I digress), do this:
runOnlyOnce = function(func) {...} // As defined above
animate_images = runOnlyOnce(animate_images);
or
animate_images = runOnlyOnce(function(){
alert('Animate all the things!');
});
The function itself has no dependencies on the rest of underscore.
Solution 2:
Use a static property of your function object, as in a boolean animate_images.isRunning
. At the start of animate_images
, encapsulate the animation initialization with something like
animate_images() {
// on first load, animate_images.isRunning is undefined,// so (!animate_images.isRunning) returns true.if(!animate_images.isRunning) {
/* launch animation */;
// define animate_images.isRunning and assign true
animate_images.isRunning = true;
} else {
/* animation already initialized */
}
}
Solution 3:
You could override your function with an empty function once it has been executed:
functiona(){
console.log("hello");
a = function(){};
}
a(); //"hello"a(); //>>nothing happens<<
Actually this will just override the reference a
to your function. So this only works if you don't reference to the same function multiple times. If you do something like this:
functiona(){
console.log("hello");
a = function(){};
}
var obj { b:a };
a(); //"hello"a(); //>>nothing happens<<
obj.b(); //"hello"
this method will fail.
Post a Comment for "Call A Function Only If It Hasn't Been Called / Run A Function Only Once"