(function($){...})(jQuery)、$(function(){ })和$.fn
阿新 • • 發佈:2019-01-25
(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);
簡單理解是(function($){...})(jQuery)
用來定義一些需要預先定義好的函式
$(function(){ })
則是用來在DOM載入完成之後執行\執行那些預行定義好的函式.
開發jQuery外掛時總結的一些經驗分享一下。
一般先看jQuery(function(){ });
,意義為在DOM載入完畢後執行了ready()方法。
再看 (function(){ })(jQuery)
。
$.fn
$.fn
是指jquery的名稱空間,加上fn上的方法及屬性,會對jquery例項每一個有效。
如定義了$.fn.abc()
那麼你可以這樣子:
$("#div").abc();
$.fn.initPageMe = function(opts) {}; //定義擴充套件方法
$(function() {
$('.pageMe').initPageMe(); //呼叫擴充套件方法
});