29 votes

Pourquoi ne $($) crash de ma page?

Avertissement: N'essayez pas ceci à la maison


Pourquoi, si je suis à l'aide de jQuery, n' $($) gel de la page?

38voto

pimvdb Points 66332

$($) est un raccourci pour $(document).ready($). Donc, il va exécuter la fonction (lorsque le DOM est prêt ou directement lorsque cela est déjà le cas).

La fonction transmise à l' .ready est passé à la fonction jQuery pour des raisons de commodité (particulièrement utile lorsque vous êtes en noConflict mode). Donc, $($) appellerons $ avec $ comme argument - et tout ce qui va se produire à nouveau, ce qui est récursivité sans fin.


Une autre explication:

  1. Vous appelez $($).
  2. jQuery ajoute l'argument de fonction ($) pour l'une, interne, ready de la liste.
  3. Quelques temps plus tard, jQuery voit que le DOM est prêt et pense: "appelons toutes les fonctions dans l' ready liste".
  4. La seule fonction dans l' ready liste $, donc il appelle $.
  5. jQuery voit il doit passer à l' $ de la fonction comme argument de ces fonctions.
  6. Il appelle $ avec $ comme argument.
  7. L' $ fonction voit une fonction comme argument, mais parce que le DOM est prêt, il appelle directement la fonction (il n'y a rien à attendre).
  8. L' $ fonction est appelée avec $ comme argument.
  9. Tout se passe depuis l'étape 7 s'applique.

23voto

Diabolic Points 449

Maintenant, c'est ce que j'appelle "jQueryception."

Vous appelez ensemble de la bibliothèque jQuery à l'intérieur de jQuery.

Plus d'informations;

Lorsque vous appelez "$" (défini comme jQuery de base de la fonction par la bibliothèque jQuery), il initialise le jQuery et tente d'appeler la fonction définie si il en a un. En fait, quand vous appelez "$($);" vous serez l'appel de jQuery à l'intérieur de jQuery et ça va être l'appel de jQuery, encore et encore.

À partir de jQuery 1.7.1 code source;

    // HANDLE: $(function)
    // Shortcut for document ready
    } else if ( jQuery.isFunction( selector ) ) {
        return rootjQuery.ready( selector );
    }

Et

rootjQuery = jQuery(document);

Comme vous pouvez le voir, lorsque vous appelez $($); il tente d'appeler jQuery avec le nom de votre fonction et si vous l'appelez avec jQuery nouveau la même chose va se produire à l'infini comme je l'ai expliqué avant.

3voto

JAAulde Points 10235

$ est un alias pour l' jQuery de l'usine de la fonction.

L' jQuery usine de fonction, lorsqu'il est passé d'une fonction comme premier param, exécute la fonction à l' document.ready et transmet jQuery comme premier paramètre.

Donc vous vous retrouvez avec une récursivité infinie de départ lors de l' document.ready est atteint.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X