免责声明:请勿在家中尝试
为什么,如果我使用jQuery,$($)
是否会冻结页面?
答案 0 :(得分:38)
$($)
是$(document).ready($)
的快捷方式。因此,它将运行该函数(当DOM准备就绪时或直接就是这种情况)。
为方便起见,传递给.ready
的函数传递给jQuery函数(当你处于noConflict
模式时尤其有用)。因此,$($)
会以$
作为参数调用$
- 所有内容都会再次发生,这是无休止的递归。
另一种解释:
$($)
。$
)添加到内部ready
列表中。ready
列表中的所有函数”。ready
列表中唯一的功能是$
,因此它会调用$
。$
函数作为参数传递给这些函数。$
。$
函数将函数视为其参数,但由于DOM已准备就绪,因此它直接调用函数(没有什么可以等待的。)$
为参数调用$
函数。答案 1 :(得分:23)
现在这就是我所谓的“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调用它,同样的事情将会无休止地发生,就像我之前解释过的那样。
答案 2 :(得分:3)
$
是jQuery
工厂函数的别名。
jQuery
工厂函数在作为第一个参数传递函数时,在document.ready
运行该函数,并将jQuery
作为第一个参数传递给它。
因此,当达到document.ready
时,您最终会得到无限递归。