首頁  >  文章  >  web前端  >  jQuery中(function($){})(jQuery)詳解_jquery

jQuery中(function($){})(jQuery)詳解_jquery

WBOY
WBOY原創
2016-05-16 15:50:281036瀏覽

簡單的說

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

宣告了一個匿名函數,也就是將jQuery物件作為參數傳給函數

給大家一個例子

// 全局
var str = "全局字符串...";
(function () { // 第1层
  (function () { // 第2层
    (function () { // 第3层
      (function () { // 第4层 层数越多,访问全局越慢
        console.time('全局');
        for (var i=0; i<1e6; i++) {
          str += Math.random().toString().substr(2, 2);
        }
        console.timeEnd('全局');
      })();
    })();
  })();
})();
 
// 局部
(function () { // 第1层
  (function () { // 第2层
    (function () { // 第3层
      (function () { // 第4层
        var str = "内部字符串...";
        var random = Math.random;
        console.time('内部');
        for (var i=0; i<1e6; i++) {
          str += random().toString().substr(2, 2);
        }
        console.timeEnd('内部');
      })();
    })()
  })();
})();

運行程式碼 就可以看到效果了,比較慢,騷等片刻。
我剛剛測試發現一些記憶體小的電腦容易直接導致瀏覽器崩潰、
chrome武裝到牙齒了,連字符串都緩存,看不出多大效果、

和速度應該沒關係,我是這麼認為的。

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

jQuery外掛眾多,你無法確定自己使用的變數或方法名稱不於其他外掛程式重名,所以需要將所有外掛程式碼封裝到一個匿名函式當中;

由於外掛使用了jQuery所以需要導入jQuery到匿名函數中,同時使用$變數引用(因為大家已經習慣了使用$)。當然你在全局下也可以使用$,但無法完成第一個條件;
封裝的程式碼必須執行,所以要執行匿名函數同時傳入jQuery參數。

總結

其實是為了保護$符號,不管外界是否引入了另外有乾擾$的函式庫,都不會幹擾匿名函數中$就是jQuery的事實,因為他是作為參數被傳進去的。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn