成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

jQuery源碼分析系列之自調(diào)用匿名函數(shù)

psychola / 737人閱讀

摘要:自調(diào)用匿名函數(shù)打開(kāi)源碼,首先你會(huì)看到這樣的代碼結(jié)構(gòu)這是一個(gè)自調(diào)用匿名函數(shù)。這樣子最大程度防止外界的變量定義對(duì)內(nèi)部造成影響

自調(diào)用匿名函數(shù)

打開(kāi)jQuery源碼,首先你會(huì)看到這樣的代碼結(jié)構(gòu):

(function(window,undefined){

    //jquery code

})(window);

這是一個(gè)自調(diào)用匿名函數(shù)。在第一個(gè)括號(hào)內(nèi),創(chuàng)建一個(gè)匿名函數(shù);第二個(gè)括號(hào)內(nèi),立即執(zhí)行

使用自調(diào)用匿名函數(shù)的原因

通過(guò)定義一個(gè)匿名函數(shù),創(chuàng)建了一個(gè)“私有”的命名空間,該命名空間的變量和方法,不會(huì)破壞全局的命名空間。這點(diǎn)非常有用也是一個(gè)js框架必須支持的功能,jQuery被應(yīng)用在成千上萬(wàn)的JavaSctipt程序中,必須確保jQuery創(chuàng)建的變量不能和導(dǎo)入他的程序所使用的變量發(fā)生沖突

傳入?yún)?shù)window的原因

傳入window:因?yàn)閳?zhí)行js代碼是從里到外的,通過(guò)傳入window變量,使得window由全局變量變?yōu)榫植孔兞?,?dāng)在jQuery代碼塊中訪問(wèn)window時(shí),不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問(wèn)window;更重要的是,將window作為參數(shù)傳入,可以在壓縮代碼時(shí)進(jìn)行優(yōu)化,例如jQuery-1.6.1.min.js: (function(a,b){})(window);//window被優(yōu)化為a

傳入undefined的原因:

(1)Javascript 中的 undefined 并不是作為關(guān)鍵字,因此可以允許用戶對(duì)其賦值,例如IE8:

    var undefined = "change"
    ;(function(window) {
          alert(undefined);//IE8 "change"
    })(window)
    

(2)行參undefined是局部的,所以就算在外部定義了undefined,里面的undefine依然不受影響。這樣子最大程度防止外界的變量定義對(duì)內(nèi)部造成影響

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/82440.html

相關(guān)文章

  • lodash源碼分析之自減的兩種形式

    摘要:作用與用法是的內(nèi)部函數(shù),之前在源碼分析之緩存介紹過(guò)一種這樣的數(shù)據(jù)結(jié)構(gòu)這是一個(gè)二維數(shù)組,每項(xiàng)中的第一項(xiàng)作為緩存對(duì)象的,第二項(xiàng)為緩存的值。 這個(gè)世界需要一個(gè)特定的惡人,可以供人們指名道姓,千夫所指:全都怪你?!迳洗簶?shù)《當(dāng)我談跑步時(shí)我談些什么》 本文為讀 lodash 源碼的第六篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-lodash gitbook也會(huì)同步倉(cāng)庫(kù)的更新...

    Keven 評(píng)論0 收藏0
  • jQuery源碼分析1-jQuery對(duì)象的初始化

    摘要:那么為什么要在參數(shù)列表中增加呢這樣做也有兩個(gè)目的因?yàn)橛行┑桶姹镜臑g覽器中是可以被重新賦值的,在自調(diào)用匿名函數(shù)的作用域內(nèi),確保是真的未定義。 1、命名空間 為什么要使用命名空間? 在一些語(yǔ)言中會(huì)看到有命名空間的概念,可在js中并沒(méi)有,但是可以通過(guò)閉包來(lái)實(shí)現(xiàn)。在js閉包中定義的變量會(huì)被保存到一個(gè)作用域且不會(huì)污染全局變量,在程序運(yùn)行完之后也不會(huì)被銷毀。 我們可以看到,jQuery的做法就是使...

    qiangdada 評(píng)論0 收藏0
  • 聽(tīng)飛狐聊JavaScript設(shè)計(jì)模式系列04

    摘要:介一回,偶們來(lái)聊一下用中的類,有些盆友可能用過(guò)或者的,知道語(yǔ)法糖,可是在中并沒(méi)有,中需要用到構(gòu)造函數(shù)來(lái)模擬類。而且要注意一點(diǎn),構(gòu)造函數(shù)沒(méi)有語(yǔ)句,是自動(dòng)返回。 本回內(nèi)容介紹 上一回聊到JS的Function類型,做了柯里化,數(shù)組去重,排序的題。 介一回,偶們來(lái)聊一下用JS中的類,有些盆友可能用過(guò)ES6或者TypeScript的,知道Class語(yǔ)法糖,可是在ES5中并沒(méi)有,ES5中需要用到...

    kgbook 評(píng)論0 收藏0
  • javascript 中踩過(guò)的坑 --(function(){})()

    摘要:在這一節(jié),我們碰到的片段是一組立即運(yùn)行的匿名函數(shù)。匿名函數(shù)的調(diào)用要調(diào)用一個(gè)函數(shù),我們必須要有方法定位它,引用它。那么很顯然,沒(méi)有任何實(shí)現(xiàn)的匿名函數(shù)不可能應(yīng)用了閉包特性。 代碼如下: (function(){ //這里忽略jQuery所有實(shí)現(xiàn) })(); (function(){ //這里忽略jQuery所有實(shí)現(xiàn) })(); 半年前初次接觸jQuery的時(shí)候,我也像其他人一樣很興...

    vpants 評(píng)論0 收藏0
  • 學(xué)習(xí) underscore 源碼整體架構(gòu),打造屬于自己的函數(shù)式編程類庫(kù)

    摘要:譯立即執(zhí)行函數(shù)表達(dá)式處理支持瀏覽器環(huán)境微信小程序。學(xué)習(xí)整體架構(gòu),利于打造屬于自己的函數(shù)式編程類庫(kù)。下一篇文章可能是學(xué)習(xí)的源碼整體架構(gòu)。也可以加微信,注明來(lái)源,拉您進(jìn)前端視野交流群。 前言 上一篇文章寫了jQuery整體架構(gòu),學(xué)習(xí) jQuery 源碼整體架構(gòu),打造屬于自己的 js 類庫(kù) 雖然看過(guò)挺多underscore.js分析類的文章,但總感覺(jué)少點(diǎn)什么。這也許就是紙上得來(lái)終覺(jué)淺,絕知此...

    junnplus 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<