jQuery源码研究01
為了研究方便,我自己定義的jQuery對象改為xQuery,意思是擴(kuò)展 jQuery.
首先jQuery整體的結(jié)構(gòu):
1 (function(window,undefined)2 {
3 var xQuery = (function(){});
4 ....
5 window.xQuery = window.$ = xQuery;
6 })(window);
為什么jQuery要使用這樣的結(jié)構(gòu)呢?我們再看下面的代碼:
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代碼放到一個匿名函數(shù)里面,如上代碼所示:當(dāng)我們執(zhí)行代碼的時候ftn2()是可以訪問,而ftn()1是不能訪問的,從結(jié)果我們可以看到,放在閉包里面的方法是不能直接被外界所引用的,那么為什么閉包里面的方法是不能被外界引用了?原因就是在于javascript的閉包原理,直接定義的ftn2函數(shù)(直接在script標(biāo)簽里面),他是屬于window的對象,因此頁面一加載就可以直接運(yùn)行,而ftn1()的外層是function(){},在javascript里面函數(shù)可以這么定義 function ftn(){},也可以這么定義var ftn = function(){},而調(diào)用的時候都是ftn(),而第二種ftn就是這個function()的別名,知道這些原理,我們再看看下面的匿名函數(shù),(function(){})();這就是相當(dāng)于沒有別名的一個函數(shù),定義完后馬上執(zhí)行,而且里面的空間是一個封閉的空間,里面的變量也就可以和外部環(huán)境隔離開,外部不能進(jìn)行直接的調(diào)用。但是定義的類庫總是要被外部調(diào)用的,因此jQuery會把window對象傳到函數(shù)內(nèi)部,通過window.xQuery = window.$ = xQuery;,使得外部環(huán)境可以調(diào)用jQuery框架內(nèi)部定義的方法
轉(zhuǎn)載于:https://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2178454.html
總結(jié)
以上是生活随笔為你收集整理的jQuery源码研究01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】android通讯录列表,A~Z字
- 下一篇: 单例模式小记【原创】