jQuery的 $(function(){}) 和 (function($) {})(jQuery)

  • Post author:
  • Post category:其他




jQuery的文档就绪函数:

$(document).ready(function(){

--- jQuery functions go here ----

});





$(function(){…});



也可以写作



jQuery(function($) {…});



, 其实就是



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



的简写。





jQuery(function(){ 
});

or




$(function(){ 
});



这是为了防止文档在完全加载(就绪)之前运行 jQuery 代码。



如果在文档没有完全加载之前就运行函数,操作可能失败。下面是两个具体的例子:



  • 试图隐藏一个不存在的元素



  • 获得未完全加载的图像的大小



$(document).ready() 和JavaScript window.onload的区别:




两者都是指页面加载完成后,执行函数里的内容, $(document).ready() 是指DOM加载完成后就可以执行,JavaScript window.onload 不仅仅指DOM加载完成,还包括图片等外部资源完全加载后才能执行。



区别:


window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行,$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕


window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个,$(document).ready()可以同时编写多个,并且都可以得到执行


window.onload没有简化写法,$(document).ready(function(){})可以简写成$(function(){})





(function($) {})(jQuery)





(function(){ 
})(jQuery);


其实际上是执行()(para)匿名方法,只不过是传递了jQuery对象。


相当于

function aa($){} 
aa(jQuery)



是初始化jquery对象的惯用方法.




通俗点说就是在页面DOM加载完成后(不包括图片下载完成)执行你需要的代码,由于不包括图片下载,所以比window.onload效率高.


不过这个东西,有的时候会使页面跳动,很多JQUERY插件都是在加载完成后,才改变样式的,页面会有跳动或闪动的感觉.比如ui.tab这个插件,页面元素一多,全部显示出来了,它才形成TAB,很晕的说




(function(){})();



立即执行函数


;相当于先申明一个函数,声明完后直接调用;









如果参数如:


(function(str){alert(str)})("output"));


相当于:

function OutPutFun(str){alert(str);};OutPutFun("output");




总结:




1. $(function(){ }) 或 jQuery(function(){ })


此函数也可以写成 jQuery(function(){ }),

用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在

。不可用于存放开发插件的代码,因为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中的方法(函数)。



2.

(function($){…})() 或 (function($){…})(jQuery)



此函数也可以写成(function(){ })(jQuery);其实际上是执行()(para)匿名方法,只不过是传递了jQuery对象。

用于存放开发插件的代码,执行其中代码时DOM不一定存在

,所以若要直接自动执行DOM操作的代码请小心使用。它相当于:



function wido($){} ;  wisdo(jQuery), 是初始化jquery对象的惯用方法.



3.

(function(){})() 或  (function(){ })(jQuery)



可以理解为

闭包,是一个匿名方法的调用,以保证方法内的变量不与外界冲突,

它等效于匿名函数 function(arg){…} ,参数为 arg,是

初始化jquery对象的惯用方法

,有的时候会使页面跳动, 在调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){…})(param),这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数,而(function($){…})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery,


例如:



(funtion(str){alert(str)})(“output”));



相当于:



funtion OutPutFun(str){alert(str);};



OutPutFun(“output”);




参考文档:


jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别