中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[置頂]       jQuery亂談(一)

發布時間:2020-06-24 23:38:17 來源:網絡 閱讀:192 作者:873582595 欄目:web開發

一直想對jQuery框架做一個深入而全面的分析,可惜總是沒做到,正好這段時間閑著,我就趕緊把這事給辦了,省的惦記著。

  jQuery,相信大家都不陌生,對它的介紹我就不說了,我只說一下我對jQuery自己的一些理解。在我看來,jQuery雖然應用面非常廣,但它更多的用于中小型網站的開發,或者偏向于設計的人員使用。相對于YUI、Ext-JS這些大的庫來說,jquery更像是個人的巔峰之作。而像YUI、Ext-JS這些庫,它們的應用面更偏重于企業級開發。這也是庫與框架的區別

  雖然如此,jQuery還是有很多的閃光點值得我們學習,這也是我決定對jQuery做深入而細致的分析的原因。當然,網上已經有很多人對jQuery做了很深入的研究,本人的分析肯定會和別人有很多重復的地方,請不要見怪,我只想把我想到的東西寫下來而已。閑話不說了,下面正式開始分析。

注:文章中針對的是jQuery-1.8.3.js,也就是最新的版本,若需要下載,請點擊:http://code.jquery.com/jquery-1.8.3.js

  整個jQuery就是一個自執行匿名函數。所謂的自執行匿名函數,就是沒有函數名的定義后直接執行的函數。通常有兩種格式:

(function () {    /* code */  } ());   (function () {    /* code */  })(); 


jQuery使用的就是第二種格式:

(function( window, undefined ) {    /*code*/ })( window );


 也許你會發現,這個匿名函數有兩個形參:window、undefined,但是只有一個實參:window。為什么要把window這個在JavaScript中屬于“超級全局變量”的已存在的值傳給函數呢?這里面涉及到了作用域鏈的知識,有興趣的同學可以參考這篇文章:深入理解JavaScript系列(14):作用域鏈(Scope Chain) 

  這里把window作為實參可以減少作用域鏈的長度,有利于性能的優化。至于把undefined作為形參而又不傳實參,是因為undefined在ECMAScript第三版中不屬于關鍵字未來關鍵字(Javascript關鍵字是不能作為變量名和函數名使用的,使用Javascript關鍵字作為變量名或函數名,會使Javascript在載入過程中出現編譯錯誤),所以是可以允許用戶對undefined進行賦值的:

/*未對undefined賦值*/ var a = undefined; console.log(a);  //undefined  /*對undefined賦值*/ var undefined = 'Hello!'; var a = undefined; console.log(a);  //"Hello!"

幸好現代瀏覽器(FireFox、IE9+、Opera、Safari、Chrome)已經糾正了這一錯誤。在這些瀏覽器中即使對undefined進行賦值,瀏覽器依舊會把undefined賦值給變量:

[置頂]          jQuery亂談(一)

  而jQuery采用這種寫法,可以避免jQuery里面的undefined遭到污染。在執行匿名函數的時候,只傳遞一個參數 window, 而不傳遞 undefined,那么函數體中的 undefined 局部變量的值,剛好就是 undefined。

  接下來,在jQuery里面定義了一大堆的變量和方法:

(function( window, undefined ) { var       /*一堆局部變量*/      jQuery = function( selector, context ) { /*該方法是jQuery的基礎*/         // The jQuery object is actually just the init constructor 'enhanced'         return new jQuery.fn.init( selector, context, rootjQuery );     },      jQuery.fn = jQuery.prototype = {     /*code*/    }; })(window);


 jQuery在內部把大部分的變量放到了最上面,這樣雖然有利于變量在作用域鏈的查找(作用域鏈問題請參考:深入理解JavaScript系列(14):作用域鏈(Scope Chain)),但我認為這種寫法在這里雖然無可厚非,但在我們平常寫JavaScript代碼時不是一種很好的編程習慣。我更推薦當我們用到變量時在定義,這樣寫出來的代碼更加清晰。至于性能方面的損耗,真的可以忽略不計。當然,在大型的開發中,由于我們已經對各種變量的生存情況有了很清晰地了解,這時候把變量全部放在頭部,再加上適當的注釋,代碼的結構會更加明確。

  jQuery.fn.init( selector, context, rootjQuery )這個方法是整個jQuery的核心,大家應該對類似$('div .hd')的選擇器不陌生吧,該方法提供了jQuery選擇器的全部功能。至于該方法的具體實現,明天我再好好寫一下吧。

  另外我發現,在jQuery里面,注釋很豐富,很全面,這對于我們了解jquery源碼是個不小的幫助。工作中我們也需要養成這樣的好習慣。

  這篇文章只是對jQuery做一個簡單的分析,后面的會更加全面,同時還會加上我的一些見解和評價,以及相關的資料參考。我寫這些文章的目的就是對jQuery進行全面和仔細的分析,里面的一些觀點也許有不對的地方,忘大家原諒,畢竟本人學習jQuery時間也不長。

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤岗市| 洛隆县| 牙克石市| 闻喜县| 富锦市| 柞水县| 连平县| 通化县| 贞丰县| 若羌县| 栖霞市| 宜川县| 绥棱县| 汝南县| 竹北市| 桓仁| 新绛县| 商河县| 甘孜县| 叶城县| 津南区| 灯塔市| 双辽市| 时尚| 五原县| 宁河县| 南木林县| 麟游县| 岐山县| 盱眙县| 阿合奇县| 从化市| 开原市| 九龙坡区| 灯塔市| 平利县| 南陵县| 尼玛县| 呼和浩特市| 高唐县| 弥渡县|