jQuery .animate() de rappel boucle infinie
Une question simple: Pourquoi ne puis-je le faire
var start = function() {
$('#element').animate({}, 5000, 'linear', start);
}
mais pas cette
function start() {
$('#element').animate({}, 5000, 'linear', start());
}
?
Le premier fonctionne parfaitement, le redémarrage de l'animation après qu'il accomplit. La deuxième simplement provoque une boucle infinie.
OriginalL'auteur Dakota | 2011-06-23
Vous devez vous connecter pour publier un commentaire.
Utiliser
ou
deuxième cas est utile si vous voulez passer quelques arguments pour commencer..
OriginalL'auteur Gabriele Petrioli
c'est parce que dans le premier vous envoyez l'espace de nom de la fonction, lorsque vous ajoutez de la () à la fin du nom de la fonction, il exécute la fonction immédiatement
OriginalL'auteur Trey
Dans votre deuxième fonction, vous êtes l'exécution de la fonction au lieu de passer d'une référence à la fonction, c'est entrer dans une boucle infinie.
Changer votre deuxième fonction à partir de:
à
OriginalL'auteur Chandu
Dans le deuxième exemple, vous êtes essentiellement faire un appel récursif de
start()
.Ce que vous voulez faire est de passer la fonction elle-même, comme vous le faites dans votre premier exemple. Votre deuxième exemple est seulement en fournissant le résultat de l'appel
start()
.OriginalL'auteur Jack Edmonds
Dans le second cas, vous êtes à l'appel de la fonction directement, au lieu de passer comme paramètre.
start()
va appeler démarrer immédiatement, et passer la valeur de retour de l'.animate()
. Cela provoque la personne infinie de la récursivité.OriginalL'auteur Dogbert