Отказ от ответственности: Не пытайтесь делать это дома
Почему, если я использую 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
.