国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

我眼中的閉包

leeon / 2825人閱讀

閉包,顧名思義就是一個(gè)封閉的包裹,你沒辦法窺探到其內(nèi)部,只能通過暴露給你的方法進(jìn)行操作。其實(shí)在寫代碼的過程中,我們可能已經(jīng)使用了閉包,只是當(dāng)時(shí)不知道而已。等理解了閉包,再去回顧以前的代碼,就會(huì)發(fā)現(xiàn)JavaScript中閉包無處不在。
剛開始學(xué)習(xí)閉包的時(shí)候,我看過很多關(guān)于閉包的文章,大部分都會(huì)舉例這樣一段代碼:

執(zhí)行函數(shù)Foo(),將函數(shù)內(nèi)部的方法bar作為返回值,賦值給變量fn,這樣在外部就可以直接訪問函數(shù)內(nèi)的變量。看下面這段代碼:

將內(nèi)部函數(shù)bar的引用傳遞給一個(gè)全局變量fn。
當(dāng)函數(shù)Foo()執(zhí)行完畢后,F(xiàn)oo()的內(nèi)容不會(huì)再被使用,根據(jù)javascript的垃圾回收機(jī)制,函數(shù)的內(nèi)存空間將會(huì)被回收,但是因?yàn)閎ar()在函數(shù)外部被執(zhí)行,而且bar可以訪問函數(shù)內(nèi)部的所有變量,所以函數(shù)的內(nèi)存空間不會(huì)被回收。
所以無論通過哪種方式將內(nèi)部函數(shù)傳遞到它所在的作用域之外,而它對(duì)于自身定義時(shí)的作用域始終有訪問的權(quán)限,這就形成了閉包,所以無論在什么地方執(zhí)行這個(gè)內(nèi)部函數(shù)都會(huì)用到閉包。
現(xiàn)在來說一下閉包與循環(huán):

很多人會(huì)以為這段代碼的輸出結(jié)果是:0 1 2 3 4,其實(shí)就算將代碼修改為setTimeout(....,0),結(jié)果也是:5 5 5 5 5。
因?yàn)檫@些回調(diào)函數(shù)是在循環(huán)結(jié)束之后才開始執(zhí)行,而他們共享全局作用域中的變量i,所以在它們執(zhí)行的時(shí)候所訪問到的i=5;對(duì)這段代碼進(jìn)行修改:

使用立即執(zhí)行函數(shù)創(chuàng)建一個(gè)獨(dú)立的作用域,并將作用域封閉在每一個(gè)回調(diào)函數(shù)中,使其擁有正確的變量i的引用。
閉包與模塊:

這種模式在javascript中被稱為模塊,Person是一個(gè)函數(shù),通過調(diào)用它來創(chuàng)建內(nèi)部作用域和閉包,它返回的是一個(gè)對(duì)象(不一定要返回對(duì)象,也可以只返回內(nèi)部方法),該對(duì)象被賦值給全局變量p,對(duì)象中的值是對(duì)函數(shù)內(nèi)部方法的引用。通過p可以訪問函數(shù)內(nèi)部的數(shù)據(jù)變量和方法。

參考資料:
1.YOU DON"T KNOW JS,KYLE SIMPSON

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

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

相關(guān)文章

  • 眼中 Nginx(五):Nginx — 子請(qǐng)求設(shè)計(jì)之道

    摘要:上圖中,每個(gè)紅圈表示一個(gè)請(qǐng)求,每一層的請(qǐng)求分別是上一層請(qǐng)求的子請(qǐng)求。換而言之,父請(qǐng)求是依賴于子請(qǐng)求的。特別地,的子請(qǐng)求運(yùn)行時(shí),會(huì)阻塞父請(qǐng)求掛起其對(duì)應(yīng)的協(xié)程。 張超:又拍云系統(tǒng)開發(fā)高級(jí)工程師,負(fù)責(zé)又拍云 CDN 平臺(tái)相關(guān)組件的更新及維護(hù)。Github ID: tokers,活躍于 OpenResty 社區(qū)和 Nginx 郵件列表等開源社區(qū),專注于服務(wù)端技術(shù)的研究;曾為 ngx_lua 貢...

    Jioby 評(píng)論0 收藏0
  • JDK源碼那些事兒之眼中HashMap

    摘要:接下來就來說下我眼中的。鏈表轉(zhuǎn)換為樹的閾值,超過這個(gè)長(zhǎng)度的鏈表會(huì)被轉(zhuǎn)換為紅黑樹,當(dāng)然,不止這一個(gè)條件,在下面的源碼部分會(huì)看到。 源碼部分從HashMap說起是因?yàn)楣P者看了很多遍這個(gè)類的源碼部分,同時(shí)感覺網(wǎng)上很多都是粗略的介紹,有些可能還不正確,最后只能自己看源碼來驗(yàn)證理解,寫下這篇文章一方面是為了促使自己能深入,另一方面也是給一些新人一些指導(dǎo),不求有功,但求無過。有錯(cuò)誤的地方請(qǐng)?jiān)谠u(píng)論中...

    voyagelab 評(píng)論0 收藏0
  • 一文帶你了解什么是JavaScript 函數(shù)式編程?

    摘要:前言函數(shù)式編程在前端已經(jīng)成為了一個(gè)非常熱門的話題。整個(gè)過程就是體現(xiàn)了函數(shù)式編程的核心思想通過函數(shù)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換。高階函數(shù)函數(shù)式編程傾向于復(fù)用一組通用的函數(shù)功能來處理數(shù)據(jù),它通過使用高階函數(shù)來實(shí)現(xiàn)。 前言 函數(shù)式編程在前端已經(jīng)成為了一個(gè)非常熱門的話題。在最近幾年里,我們看到非常多的應(yīng)用程序代碼庫(kù)里大量使用著函數(shù)式編程思想。 本文將略去那些晦澀難懂的概念介紹,重點(diǎn)展示在 JavaScrip...

    acrazing 評(píng)論0 收藏0
  • 滴滴陶文:眼中技術(shù)深度

    摘要:出品滴滴技術(shù)作者陶文技術(shù)同學(xué)的主要工作是構(gòu)建一個(gè)可運(yùn)行的去解決用戶的一個(gè)。陶文滴滴首席工程師在滴滴參與過基礎(chǔ)架構(gòu),核心出行平臺(tái)重構(gòu),業(yè)務(wù)中臺(tái)建設(shè)等工作,目前在從事平臺(tái)治理和客服系統(tǒng),致力于減少大家出行中遇到的不美好。 出品 | 滴滴技術(shù)作者 | 陶文 showImg(https://segmentfault.com/img/bVbs78V?w=1280&h=544); 技術(shù)同學(xué)的主要工...

    young.li 評(píng)論0 收藏0

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

0條評(píng)論

閱讀需要支付1元查看
<