J'ai une fonction javascript.
Comment vérifier:
si la fonction a été appelée (dans la section <head></head>
ont cette fonction), alors ne pas appeler la fonction
si la fonction n'a pas été appelée (dans la section <head></head>
n'ont pas cette fonction), alors appelez la fonction
comme require_once
ou include_once
avecPHP
Deux options:
Variables statiques Voici comment créer des variables statiques (comme en C) à l’aide de fonctions d’appel automatique pour stocker vos variables statiques dans une fermeture.
var myFun = (function() {
var called = false;
return function() {
if (!called) {
console.log("I've been called");
called = true;
}
}
})()
Remplacement de la fonction vide Définit la fonction sur une fonction vide après son exécution.
function callonce() {
console.log("I've been called");
arguments.callee = function() {};
}
Résumé de l'idée Voici une fonction qui renvoie une fonction qui n'est appelée qu'une seule fois. Ainsi, vous n'aurez pas à vous soucier d'ajouter du code de plaque de chaudière à chaque fonction.
function makeSingleCallFun(fun) {
var called = false;
return function() {
if (!called) {
called = true;
return fun.apply(this, arguments);
}
}
}
// Alternate implementation
function makeSingleCallFun(fun) {
return function() {
return fun.apply(this, arguments);
arguments.callee = function() {};
}
}
var myFun = makeSingleCallFun(function() {
console.log("I've been called");
});
myFun(); // logs I've been called
myFun(); // Does nothing
Utilisez un motif de décorateur.
// your function definition
function yourFunction() {}
// decorator
function callItOnce(fn) {
var called = false;
return function() {
if (!called) {
called = true;
return fn();
}
return;
}
}
yourFunction(); // it runs
yourFunction(); // it runs
yourFunction = callItOnce(yourFunction);
yourFunction(); // it runs
yourFunction(); // null
Cette solution fournit un moyen sans effets secondaires pour atteindre votre objectif. Vous n'êtes pas obligé de modifier votre fonction d'origine. Cela fonctionne bien même avec des fonctions de bibliothèque. Vous pouvez attribuer un nouveau nom à la fonction décorée pour conserver la fonction d'origine.
var myLibraryFunction = callItOnce(libraryFunction);
myLibraryFunction(); // it runs
myLibraryFunction(); // null
libraryFunction(); // it runs
var called = false;
function blah() {
called = true;
}
if ( !called ) {
blah();
}
Vous pouvez utiliser une variable globale dans un espace de noms personnalisé pour stocker si la fonction a été appelée.
if(!window.mynamespace){
window.mynamespace={};
}
mynamespace.callMeOnlyOnce=function(){
if(mynamespace.alreadyCalled)return;
alert('calling for the first time');
mynamespace.alreadyCalled=true;
};
// alert box comes
mynamespace.callMeOnlyOnce();
// no alert box
mynamespace.callMeOnlyOnce();
If (!your_func.called) {
your_func.called = true;
your_func();
}