6
votes

Comment les fonctions chaînées sont-elles exécutées dans JQuery?

Lorsqu'une fonction est chaînée dans JQuery, quelle est l'ordre des opérations?

Exemple 1 strong> P>

$(selecter).fun1().fun2().fun3() 


0 commentaires

3 Réponses :


8
votes

de gauche à droite. fun3 () est exécuté sur le résultat (= valeur de retour) de Fun2 () , fun2 () sur celui de Fun1 ( ) .

Ce type de chaînage peut être fait en jQuery car chaque fonction chaînée renvoie l'objet / élément qu'il a été appelé.

donc $ (sélecteur) .fun1 () renvoie le $ (sélecteur) élément après exécution. fun2 () est appelé à partir de cet élément renvoyé, et ainsi de suite.


1 commentaires

Merci, mon ami! J'étais très confus avant mais maintenant ma confusion est effacée. Merci encore!



0
votes
  1. utilise une fonction "rappel". Vous passez Fun2 comme un argument à Fun1, Fun1 appelle alors Fun2 quand c'est fini.
  2. Il s'agit d'une caractéristique très intelligente de JQuery, la plupart des méthodes de JQuery renvoient l'objet d'origine. La méthode a été appelée, vous pouvez donc appeler une autre méthode sur cet objet renvoyé. La séquence est la même que la séquence qu'elle est écrite.

1 commentaires

Merci, mon ami! Votre réponse est très utile pour moi.



6
votes

Dans cet exemple: xxx pré>

Le deuxième paramètre à fonctionner est un Fonction de rappel . Cela signifie fun1 code> exécute alors strud> fun2 code> exécute. P>

Dans cet exemple: p>

$(selecter).fun1().fun2().fun3()


2 commentaires

SO avec Animations, Fun1, Fun2 et Fun3 seraient 3 animations de chevauchement simultes - Je pense que vous avez un peu surchargé cette partie. Avec des animations, les fonctions réelles incendient toujours dans l'ordre, mais elles-mêmes créent des intervalles avec des fonctions de rappel. Étant donné que JS est une seule filetée, les fonctions ne peuvent pas courir de manière asynchrone. Les minuteries traitent séparément du fil principal, mais leurs fonctions de rappel sont exécutées sur le fil principal lorsqu'il devient inactif.


@Andy - vrai, je voulais dire effet est simultané et qui se chevauche :)