jquery的理念就是「寫更少的**,做更多的事」,而且做到**的高度相容性。
大致可以分為三個部分:構造模組,底層支援模組和功能模組。
這裡先分析一下匿名函式:
匿名函式的作用是建立一塊封閉區域,外面不能夠訪問裡面的變數和方法,有兩種比較常見的寫法:
寫法一:(function除了這兩種寫法之外還有很多寫法,可以參考js自呼叫匿名函的n種寫法()())
寫法二:(
function
())()
jquery採用這種方式就是為了建立乙個封閉的作用域,以免受到其他**影響或者影響其他**,保持獨立性。
自呼叫匿名函式也是可以傳遞引數的,jquery傳遞了兩個引數 window和undefined首先都是可以方便壓縮,例如在jquery.min.js分別用a,b代替這兩個引數
再者就是window是js的全域性變數,引入到jquery的作用域後就變成了區域性變數這樣在訪問時就不用退出jquery的作用域查詢了,這裡涉及到js作用域鏈的知識,舉個小例子說明一下
var a='a';這裡我在全域性和函式和區域性變數裡面裡面分別宣告了兩個變數,當在全域性訪問時區域性變數不能識別,在區域性訪問時都能識別。當執行訪問乙個變數的**時,會首先在當前同級作用域內搜尋,如果搜尋不到就會向上一級作用域搜尋直到找到為止。所以在函式b裡面訪問的兩個變數的執行效率是不同的,變數c在b的作用域裡面直接找到,變數a不在b的作用域裡面所以向上查詢到window(全域性變數)下的a輸出了結果。如果我們把上述**改動一下變成這樣:(function
b()())
console.log(a);
//輸出『a』
//報錯 c未宣告的變數
var a='a';結果一樣但是效率卻提高了,因為a已經在b的作用域內不需要向上查詢了,這就是為什麼jquery這樣做的原因,是不是很值得我們學習啊!(function
b(a)(a))
//輸出『a』
//報錯 c未宣告
雖然在傳遞引數的時候傳入了乙個window但是在接受引數的時候卻變成了兩個,那第二個"undefined"由於沒有值就會被賦值為undefined型別的唯一值「undefined」,這樣做似乎不是多次一舉嗎?其實不是的,在一些瀏覽器中undefined的值是可以被重寫的,下面這張圖展示了不同瀏覽器測試的結果
所以jquery巧妙地利用了js的特性,保證在jquery中的undefined是js的undefined型別的值「undefined」。
還有就是注意到在jquery**的末尾是加了分號的,這是乙個很好地習慣,因為在自呼叫匿名函式前後不加分好可能會導致錯誤
if ( typeof define === "function" && define.amd && define.amd.jquery ) );下面舉例說明會報錯的例子:}//jquery末尾使用了分號
})( window );
//普通的函式不會報錯
var a='a'
function
b()
//自呼叫函式匿名會報錯會把「a」當成函式執行報錯
var a='a'(
function
()())
Tomcat 總體架構
首先一定要先感謝 tomcat架構解析 一書的作者劉光瑞,對於我這樣的新手來說,這本書關於tomcat總體架構的介紹能夠讓我快速的了解整個架構的設計背景,達到了循序漸進的目的,在這裡非常推薦新手入手一本。最後這個章節主要是介紹tomcat整體架構的,整體內容主要在於模組介紹以及關聯,希望通過這個章節...
IMS總體架構
ims總體架構 如上圖所示,ims總體架構通常分為三層,接入層 呼叫控制層 業務應用層 上圖中,ims網路主要網元功能說明如下 當前我們主要關注圖中藍色圈點的幾個網元,包括 sip終端 p cscf i cscf s cscf hss as 後續分析總結中主要基於這些網元的互動進行詳細描述。參考文件...
Mysql總體架構
授權命令 grant 許可權1 許可權2 許可權n on 資料庫名稱.表名稱 to 使用者名稱 使用者位址 identified by 連線口令 該許可權如果發現沒有該使用者,則會直接新建乙個使用者。grant select,insert,delete,drop on atguigudb.to li...