繁体   English   中英

为什么$($)会崩溃我的页面?

[英]Why does $($) crash my page?

免责声明: 请勿在家中尝试此操作


为什么,如果我使用jQuery, $($)冻结页面?

$($)$(document).ready($)的快捷方式。 因此,它将运行该函数(当DOM准备就绪时或直接就是这种情况)。

为了方便起见,传递给.ready的函数传递给jQuery函数(当你处于noConflict模式时尤其有用)。 因此, $($)将以$作为参数调用$ - 并且一切都会再次发生,这是无休止的递归。


另一种解释:

  1. 你打电话给$($)
  2. jQuery将函数参数( $ )添加到内部ready列表中。
  3. 一段时间后,jQuery看到DOM准备就绪并且认为:“让我们调用ready列表中的所有函数”。
  4. ready列表中唯一的功能是$ ,因此它调用$
  5. jQuery 认为它应该将$函数作为参数传递给那些函数。
  6. 它以$为参数调用$
  7. $函数将函数视为其参数,但由于DOM已准备就绪,因此它直接调用函数(没有什么可以等待的)。
  8. $函数调用$作为参数。
  9. 由于第7步适用,所有事情都会再次发生

现在这就是我所说的“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工厂函数的别名。

jQuery工厂函数在作为第一个参数传递函数时,在document.ready运行该函数,并将jQuery作为第一个参数传递给它。

因此,当达到document.ready时,您将开始无限递归。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM