1. 程式人生 > >(function($){...})(jQuery)、$(function(){ })和$.fn

(function($){...})(jQuery)、$(function(){ })和$.fn

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

首先function(arg){...}定義了一個匿名函式,引數為arg,而呼叫時需要在函式後面寫上括號和實參,由於操作符的優先順序,函式本身也需要用括號,也就成了:

(function(arg){...})(param)

這 就相當於定義了一個引數為arg的匿名函式,並且將param作為引數來呼叫這個匿名函式

(function($){...}) (jQuery)則是一樣的,之所以只在形參使用$,是為了不與其他庫衝突,所以實參用jQuery

其實就等於

var fn = function($){....};
fn(jQuery);

其實可以這麼理解,不過要注意的是fn是不存在的
函式直接定義,然後就運行了。就“壓縮”成下面的樣子了

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

$(function(){ })

是 $(document).ready(function(){…})的簡寫形式,意思就是頁面載入後執行其中的程式碼。
也可以被寫成:

jQuery(function(){ });

jQuery(document).ready(function(){}); 

二者的對比:

jQuery(function(){ });用於存放操作DOM物件的程式碼,執行其中程式碼時DOM物件已存在。不可用於存放開發外掛的程式碼,因 為jQuery物件沒有得到傳遞,外部通過jQuery.method也調用不了其中的方法(函式)。
(function(){ })(jQuery);

用於存放開發外掛的程式碼,執行其中程式碼時DOM不一定存在,所以直接自動執行DOM操作的程式碼 請小心使用。

簡單理解是(function($){...})(jQuery)用來定義一些需要預先定義好的函式
$(function(){ })則是用來在DOM載入完成之後執行\執行那些預行定義好的函式.

開發jQuery外掛時總結的一些經驗分享一下。
一般先看jQuery(function(){ });,意義為在DOM載入完畢後執行了ready()方法。
再看 (function(){ })(jQuery)

$.fn

$.fn是指jquery的名稱空間,加上fn上的方法及屬性,會對jquery例項每一個有效。
如定義了$.fn.abc()

,即對jquery擴充套件了一個abc方法,那麼後面你的每一個jquery例項都可以引用這個方法了。
那麼你可以這樣子:$("#div").abc();

$.fn.initPageMe = function(opts) {};       //定義擴充套件方法
$(function() {
    $('.pageMe').initPageMe();             //呼叫擴充套件方法     
});