jQuery源碼研究01

來源:互聯網
上載者:User

為了研究方便,我自己定義的jQuery對象改為xQuery,意思是擴充 jQuery.

首先jQuery整體的結構:

1 (function(window,undefined)
2 {
3 var xQuery = (function(){});
4 ....
5 window.xQuery = window.$ = xQuery;
6 })(window);

為什麼jQuery要使用這樣的結構呢?我們再看下面的代碼:

 1 (function(){
2 function ftn1()
3 {
4 return 'ftn1()';
5 }
6 })();
7
8 function ftn1()
9 {
10 return 'ftn2()';
11 }
12 alert(ftn2());//ftn2()
13 alert(ftn1());//拋出異常,禁止訪問

  如果想jQuery架構裡面的代碼和jQuery架構以外的代碼隔離起來,那麼最好的方式就是把jQuery代碼放到一個匿名函數裡面,如上代碼所示:當我們執行代碼的時候ftn2()是可以訪問,而ftn()1是不能訪問的,從結果我們可以看到,放在閉包裡面的方法是不能直接被外界所引用的,那麼為什麼閉包裡面的方法是不能被外界引用了?原因就是在於javascript的閉包原理,直接定義的ftn2函數(直接在script標籤裡面),他是屬於window的對象,因此頁面一載入就可以直接運行,而ftn1()的外層是function(){},在javascript裡面函數可以這麼定義 function ftn(){},也可以這麼定義var ftn = function(){},而調用的時候都是ftn(),而第二種ftn就是這個function()的別名,知道這些原理,我們再看看下面的匿名函數,(function(){})();這就是相當於沒有別名的一個函數,定義完後馬上執行,而且裡面的空間是一個封閉的空間,裡面的變數也就可以和外部環境隔離開,外部不能進行直接的調用。但是定義的類庫總是要被外部調用的,因此jQuery會把window對象傳到函數內部,通過window.xQuery = window.$ = xQuery;,使得外部環境可以調用jQuery架構內部定義的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.