免责声明:请勿在家中尝试此操作
为什么我在使用jQuery时,$($)
会导致页面冻结?
免责声明:请勿在家中尝试此操作
为什么我在使用jQuery时,$($)
会导致页面冻结?
$($)
是$(document).ready($)
的快捷方式。因此,它将在DOM准备就绪时运行该函数,或者当已经准备就绪时直接运行该函数。
传递给.ready
的函数方便起见会传递jQuery函数(特别是在noConflict
模式下非常有用)。因此,$($)
将使用$
作为参数调用$
- 然后一切都会再次发生,这是无限递归。
另一个解释:
$($)
。$
)添加到内部的ready
列表中。ready
列表中的所有函数"。ready
列表中唯一的函数是$
,因此它调用$
。$
函数作为参数传递给这些函数。$
作为参数调用$
。$
函数将函数作为其参数,但由于DOM已准备就绪,它直接调用该函数(没有需要等待的内容)。$
函数被使用$
作为参数来调用。$(func)
是$(document).ready(func)
的简写形式。 - pimvdb($)
;) - Lightness Races in Orbit$
的特定参数调用会做什么。当然,在这种情况下,它实际上是$(document).ready()
的快捷方式,因为$
是一个函数。 - Lightness Races in Orbit$(function f($_again) { $_again(f); })
。 - pimvdb我称之为“jQueryception”。
你在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
工厂函数的别名。
当将函数作为第一个参数传递给jQuery
工厂函数时,它会在document.ready
时运行该函数,并将jQuery
作为第一个参数传递给它。
因此,当达到document.ready
时,就会开始无限递归。
document.ready
已经被触发,jQuery
就会立即执行传递给它的函数。 - JAAulde