Подтвердить что ты не робот

Почему $($) разбивает мою страницу?

Отказ от ответственности: Не пытайтесь делать это дома


Почему, если я использую jQuery, $($) замораживает страницу?

4b9b3361

Ответ 1

$($) является ярлыком для $(document).ready($). Таким образом, он будет запускать функцию (когда DOM готов или напрямую, когда это уже так).

Функция, переданная в .ready, передается функцией jQuery для удобства (особенно полезно, когда вы находитесь в режиме noConflict). Таким образом, $($) будет вызывать $ с $ в качестве аргумента - и все повторится, что является бесконечной рекурсией.


Другое объяснение:

  • Вы вызываете $($).
  • jQuery добавляет аргумент функции ($) во внутренний список ready.
  • Некоторое время спустя jQuery видит, что DOM готов и думает: "Позвольте вызывать все функции в списке ready".
  • Единственная функция в списке ready - $, поэтому она вызывает $.
  • jQuery видит, он должен передать функцию $ в качестве аргумента для этих функций.
  • Он вызывает $ с $ как аргумент.
  • Функция $ видит функцию как свой аргумент, но поскольку DOM готов, она вызывает функцию напрямую (ждать нечего).
  • Функция $ вызывается с $ в качестве аргумента.
  • Все происходит снова, так как применяется шаг 7.

Ответ 2

Теперь это то, что я называю "jQueryception".

Вы вызываете всю библиотеку jQuery в jQuery.

Дополнительная информация;

Когда вы вызываете "$" (определенную как основная функция jQuery библиотекой jQuery), она инициализирует jQuery и пытается вызвать определенную функцию, если она есть. Когда вы на самом деле называете "$ ($)"; вы будете вызывать jQuery внутри jQuery, и он будет вызывать jQuery снова и снова.

Из исходного кода jQuery 1.7.1

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

и

rootjQuery = jQuery(document);

Как вы можете видеть, когда вы вызываете $($); он пытается вызвать jQuery с именем вашей функции, и если вы вызовете его с помощью jQuery, то снова произойдет то же самое, что и раньше.

Ответ 3

$ является псевдонимом функции jQuery factory.

Функция jQuery factory при передаче функции в качестве первого параметра запускает эту функцию в document.ready и передает jQuery в качестве первого параметра.

Таким образом, вы получаете бесконечную рекурсию, начиная с достижения document.ready.