Comment puis-je savoir combien de fois une fonction est appelée avec javascript/jquery?
Peut-être une drôle de question, mais ici, il va: j'ai une fonction que j'appelle périodiquement et à l'intérieur de cette fonction que j'ai besoin de savoir qui itération moi, ou combien de fois la fonction a été appelée. Une version simplifiée du problème:
jQuery( document ).ready( function(){
setInterval( "myFunction()", 3000 );
});
function myFunction()
{
alert( "I have been called X times" );
}
Alors, comment puis-je calculer le X dans le code ci-dessus?
OriginalL'auteur Weblurk | 2011-12-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser une variable globale, qui est augmenté à chaque appel de la fonction:
Dès que votre code est un peu plus complexe (ou si vous utilisez beaucoup d'autres bibliothèques), vous devez, cependant, envisager l'utilisation de la portée, comme indiqué dans les autres réponses ici (mieux expliqué dans le un par Vilx).
Dans ce cas, il est probablement mieux si vous aussi vous déclarer la variable dans le fichier distinct, il sera visible dans votre "main" du document. Je ne suis pas sûr à 100% sur l'inverse
Génial, a travaillé comme un charme. Merci!
Oui, tous les fichiers javascript sont une sorte de "copier-collé" dans le document principal avant qu'ils ne soient exécutés. Donc, ils partagent tous les mêmes variables globales et tout et tout. C'est pourquoi vous devez toujours être prudent au sujet de faire des variables globales - si deux scripts de faire la même variable globale, ils vont déranger le travail de chacun.
Vous devez être très prudent avec une solution de ce genre, comme l'espace de noms global de la pollution est souvent une mauvaise pratique.
OriginalL'auteur codeling
Version facile: faire une variable globale comme dans nyarlathotep réponse. Le problème - si un autre code définit également une variable globale du même nom, vous êtes tous les deux en difficulté.
Facile version étendue - donner à la variable un nom bizarre que personne n'utilisera jamais:
calledTimesED7E69A7B141457CA8908A612E3D7A3A
Intelligent version: ajouter cette variable à une variable globale. Rappelez - vous - tout un objet en Javascript!
Version traditionnelle: l'utilisation de délimitation de l'étendue de cacher cette variable.
Ce masque "myFunction" si, donc, nous allons essayer de nouveau avec un délicat type de portée:
... et il ya un zillion d'autres façons de se cacher cette variable avec la portée. Il suffit de choisir votre préférée.
Naah, je suis juste réticents à se remettre au travail! XD
OriginalL'auteur Vilx-
Voici une autre solution intéressante qui n'utilise pas une variable externe. La meilleure partie à ce sujet est que vous pouvez laisser un pré-existants fonctions intacte et appelez-les comme vous le feriez normalement. Cela signifie que si vous êtes en essayant de "taper" à une fonction dans une bibliothèque existante, ce sera très bien pour vous. Il ajoute une discrète compteur et vous permet de continuer à l'appel de fonctions existantes normalement, même avec des arguments!
De sortie
setInterval
de sortieLe voir travailler ici sur jsfiddle
OriginalL'auteur maček
Vous aurez à utiliser une fermeture.
Normalement vous devez utiliser une variable statique. en Javascript, il ressemblerait à quelque chose comme:
Démonstration: http://jsfiddle.net/MZQ83/2/
précisément quelle erreur ai-je fait?
Je ne pense pas que vous comprenez comment vous pensez que vous faites.
Ahh, aucun. Je suppose que je devrais apprendre à lire en premier. 😛
Ce doit avoir été accepté de répondre.
OriginalL'auteur Ben West
Une variable statique est plus propre et ça ne pollue pas à l'extérieur de la portée, soit, par rapport à une fermeture ou d'un décorateur comme dans d'autres réponses.
ou
le second est un nommé fonction anonyme. Et notez que cette syntaxe:
OriginalL'auteur aljgom
Créer une variable globale et initialiser par zéro. puis ajouter un par un lors de la myfunction() est appelé. Affichage de la variable au lieu de X.
OriginalL'auteur Dhinakar