jQuery document.ready vs自我调用匿名函数

这两者有什么区别?

  1. $(document).ready(function(){ ... });

  2. (function(){ ... })();

这两个函数是同时调用的吗? 我知道,当整个HTML页面由浏览器呈现时,document.ready将被触发,但第二个函数(自我调用匿名函数)是如何触发的。 它是否等待浏览器完成呈现页面,或者在遇到任何问题时调用它?

  • $(document).ready(function(){ ... }); 或简称 $(function(){...});

    这个函数在DOM is ready时候被调用,这意味着你可以开始查询元素。 .ready()将在不同的浏览器上使用不同的方法来确保DOM真的准备就绪。

  • (function(){ ... })();

    这只是一个函数,当浏览器正在解释你的ecma-/javascript时, 它会尽快调用它自己 。 因此,你不可能在这里成功地处理DOM elements

(function(){...})(); 只要在Javascript中遇到就会被执行。

$(document).ready()将在文档加载后执行。 $(function(){...});$(document).ready()的快捷方式,并且完全一样。

  1. $(document).ready(function() { ... }); 只是将该函数绑定到文档的ready事件,如您所说,当文档加载时,事件触发。

  2. (function($) { ... })(jQuery); 实际上是一个Javascript构造,所有这段代码所做的就是将jQuery对象作为parameter passing给function($) ,并运行该函数,因此在该函数中, $总是指向jQuery对象。 这可以帮助解决命名空间冲突等

因此#1在文档加载时执行,而#2立即运行, jQuery对象名为$作为简写。

在DOM被“构造”之后document.ready运行。 在构buildDOM之前,自调函数会立即运行 – 如果插入到<head>

当DOM(Document对象模型)准备好执行JavaScript代码时,下面的代码将被执行。

 $(document).ready(function(){ // Write code here }); 

上面代码的简写是:

 $(function(){ // write code here }); 

下面显示的代码是一个自调用的匿名JavaScript函数,只要浏览器解释它就会执行:

 (function(){ //write code here })(); // It is the parenthesis here that call the function. 

下面显示的jQuery自调用函数将全局jQuery对象作为parameter passing给function($) 。 这使$可以在自调用函数中本地使用,而无需遍历全局范围的定义。 jQuery并不是唯一使用$库,所以这可以减less潜在的命名冲突。

 (function($){ //some code })(jQuery);