Отказ от ответственности: Не пытайтесь делать это дома
Почему, если я использую jQuery, $($) замораживает страницу?
Отказ от ответственности: Не пытайтесь делать это дома
Почему, если я использую jQuery, $($) замораживает страницу?
$($) является ярлыком для $(document).ready($). Таким образом, он будет запускать функцию (когда DOM готов или напрямую, когда это уже так).
Функция, переданная в .ready, передается функцией jQuery для удобства (особенно полезно, когда вы находитесь в режиме noConflict). Таким образом, $($) будет вызывать $ с $ в качестве аргумента - и все повторится, что является бесконечной рекурсией.
Другое объяснение:
$($).$) во внутренний список ready.ready".ready - $, поэтому она вызывает $.$ в качестве аргумента для этих функций.$ с $ как аргумент.$ видит функцию как свой аргумент, но поскольку DOM готов, она вызывает функцию напрямую (ждать нечего).$ вызывается с $ в качестве аргумента.Теперь это то, что я называю "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, то снова произойдет то же самое, что и раньше.
$ является псевдонимом функции jQuery factory.
Функция jQuery factory при передаче функции в качестве первого параметра запускает эту функцию в document.ready и передает jQuery в качестве первого параметра.
Таким образом, вы получаете бесконечную рекурсию, начиная с достижения document.ready.