国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 網站 > WEB開發 > 正文

深入理解javascript原型和閉包(15)——閉包

2024-04-27 15:19:29
字體:
來源:轉載
供稿:網友

原文地址:http://www.cnblogs.com/wangfupeng1988/p/3994065.html

前面提到的上下文環境和作用域的知識,除了了解這些知識之外,還是理解閉包的基礎。

至于“閉包”這個詞的概念的文字描述,確實不好解釋,我看過很多遍,但是現在還是記不住。

但是你只需要知道應用的兩種情況即可——函數作為返回值,函數作為參數傳遞。

第一,函數作為返回值

如上代碼,bar函數作為返回值,賦值給f1變量。執行f1(15)時,用到了fn作用域下的max變量的值。至于如何跨作用域取值,可以參考上一節。

 

第二,函數作為參數被傳遞

如上代碼中,fn函數作為一個參數被傳遞進入另一個函數,賦值給f參數。執行f(15)時,max變量的取值是10,而不是100。

 

上一節講到自由變量跨作用域取值時,曾經強調過:要去創建這個函數的作用域取值,而不是“父作用域”。理解了這一點,以上兩端代碼中,自由變量如何取值應該比較簡單。(不明白的朋友一定要去上一節看看,這個很重要!)

 

另外,講到閉包,除了結合著作用域之外,還需要結合著執行上下文棧來說一下。

在前面講執行上下文棧時,我們提到當一個函數被調用完成之后,其執行上下文環境將被銷毀,其中的變量也會被同時銷毀。

但是在當時那篇文章中留了一個問號——有些情況下,函數調用完成之后,其執行上下文環境不會接著被銷毀。這就是需要理解閉包的核心內容。

咱們可以拿本文的第一段代碼(稍作修改)來分析一下。

 

第一步,代碼執行前生成全局上下文環境,并在執行時對其中的變量進行賦值。此時全局上下文環境是活動狀態。

 

第二步,執行第17行代碼時,調用fn(),產生fn()執行上下文環境,壓棧,并設置為活動狀態。

 

第三步,執行完第17行,fn()調用完成。按理說應該銷毀掉fn()的執行上下文環境,但是這里不能這么做。注意,重點來了:因為執行fn()時,返回的是一個函數。函數的特別之處在于可以創建一個獨立的作用域。而正巧合的是,返回的這個函數體中,還有一個自由變量max要引用fn作用域下的fn()上下文環境中的max。因此,這個max不能被銷毀,銷毀了之后bar函數中的max就找不到值了。

因此,這里的fn()上下文環境不能被銷毀,還依然存在于執行上下文棧中。

——即,執行到第18行時,全局上下文環境將變為活動狀態,但是fn()上下文環境依然會在執行上下文棧中。另外,執行完第18行,全局上下文環境中的max被賦值為100。如下圖:

 

第四步,執行到第20行,執行f1(15),即執行bar(15),創建bar(15)上下文環境,并將其設置為活動狀態。

執行bar(15)時,max是自由變量,需要向創建bar函數的作用域中查找,找到了max的值為10。這個過程在作用域鏈一節已經講過。

這里的重點就在于,創建bar函數是在執行fn()時創建的。fn()早就執行結束了,但是fn()執行上下文環境還存在于棧中,因此bar(15)時,max可以查找到。如果fn()上下文環境銷毀了,那么max就找不到了。

使用閉包會增加內容開銷,現在很明顯了吧!

 

第五步,執行完20行就是上下文環境的銷毀過程,這里就不再贅述了。

 

閉包和作用域、上下文環境有著密不可分的關系,真的是“想說愛你不容易”!

另外,閉包在jQuery中的應用非常多,在這里就不一一舉例子了。所以,無論你是想了解一個經典的框架/類庫,還是想自己開發一個插件或者類庫,像閉包、原型這些基本的理論,是一定要知道的。否則,到時候出了BUG你都不知道為什么,因為這些BUG可能完全在你的知識范圍之外。

 

到現在閉包就簡單介紹完了,下一節我們再總結一下。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产成免费视频| 九色视频网站| 另类综合图区| 免费网站看黄yyy222| 免费a级毛片在线播放| 蜜桃视频中文字幕| 国内精品不卡| 午夜视频在线看| 91超碰国产在线| 国产欧美日本亚洲精品一4区| 国产一级大片| 精品街拍一区二区| 人人九九精品| 国产网站av| 在线激情网站| 五月婷婷丁香激情| 中文视频在线| 国产一区二区三区福利| 依依成人在线| 国产精品剧情一区二区三区| 精精国产xxxx视频在线中文版 | www.中文字幕久久久| 国产毛片毛片毛片| 一本久中文高清| 中文字幕网站视频在线| 日本视频在线观看一区二区三区| 国产毛片毛片| 亚洲成人av高清| 国产二区三区四区| 中文字幕国产在线| 黄色av网站在线| 亚洲精品视频在线免费| 国产成人亚洲综合小说区| 国产在线拍揄自揄拍视频| 国产a国产a国产a| 国产一级大片| 国产香蕉视频在线观看| 黄色电影网站在线观看| av高清在线| 亚洲欧美国产另类首页| 国产爆初菊在线观看免费视频网站 | av麻豆国产| 国产成+人+亚洲+欧美+综合| 国产一级视频| 国产黄色在线| 在线视频中文字幕第一页| 国产成人午夜精品| 国产不卡视频| 91麻豆福利| 日本国产在线| 麻豆av电影在线观看| 热99re久久精品这里都是免费| 99爱视频在线观看| 亚洲欧美精品日韩欧美| 日本一本久久| 国产一区电影| 18av在线视频| 激情丁香久久| 国产三级自拍| av在线首页| 国产精品一区二区婷婷| 国产丝袜自拍| 影音先锋日韩| 人人九九精品| 国产一二区在线| 性国产高清在线观看| 国产精品一卡二卡三卡| 国产三级在线免费| 青娱乐在线视频观看| 国产一级又黄| 日本高清中文字幕在线| 国产精品四虎| 狠狠色综合久久婷婷| 最近最好的中文字幕2019免费| 国产小视频在线观看| av人人综合网| 国产黄视频在线观看| 玖玖在线视频| ·天天天天操| 国产免费永久在线观看| 精品国语对白精品自拍视| 国产资源在线看| 尤物在线视频观看| 中文字幕一区免费| 青娱乐在线视频观看| 国产精品冒白浆免费视频 | 99免费视频| 天堂在线中文| 免费久久网站| h网址在线观看| 91网页在线观看| 久久精品国产亚洲a∨麻豆| 国产成人va亚洲电影| 天天操人人干| 最好看更新中文字幕| 九九精品九九| 九九免费视频| 九九在线观看免费视频| 午夜亚洲成人| 青草视频在线播放| 三级小说一区| 任你操视频在线观看| 亚洲欧美一区二区三区在线播放| 999在线视频| 在线影视一区| 一区二区精品区| 中文在线官网天堂| 中文在线视频观看| 在线观看av的网站| 日本动漫同人动漫在线观看| 轻轻色免费在线视频| 老司机精品视频一区二区| 黄网站在线观看高清免费| 日本不卡1区2区3区| 超碰在线免费播放| 国产一级在线| 亚洲综合在线不卡| 久久五月精品| 国产精品理人伦一区二区三区 | www.操操| 国产字幕在线看| 国产午夜视频| 亚洲成人电视网| 久久亚洲资源| 国产婷婷视频在线| 亚洲视频精品在线观看| 国产美女一区视频| 国产a级网站| 狂野欧美性猛交xxxx乱大交| 中文字幕在线视频不卡| 精品亚洲成a人片在线观看| 亚洲国产精品区| 最新国产在线| 天天插天天射| 国产成人夜间影院在线观看| 小说区乱图片区| 国产三区视频在线观看| jizz一区二区三区| 国产精品久久久久一区二区国产 | 黄污在线观看| 91在线最新| 国产香蕉免费精品视频| 日本视频一二三区中文字幕| 久久香蕉av| www.成人.com| 中文字幕2019第三页| 天天操天天是| 日本高清中文字幕在线| 国产精品免费91| 天堂资源在线中文| 黄色毛片在线观看| 欧洲亚洲精品视频| av在线不卡免费| 99在线免费观看| 国产福利av网站| 国产精品yjizz视频网一二区| 非洲黑人最猛性xxxx交| 欧美日韩亚洲国内综合网| 国产精品入口麻豆免费看| 免费的黄网站在线观看| 日本不卡1区2区3区| www.中文字幕久久久| h视频在线网站| 奇米影视狠狠狠| 欧美亚洲另类在线观看| www操操操| 超碰在线人人| 1区2区3区在线| 91亚洲天堂| 亚洲欧美中文字幕在线观看 | www.色五月| 浪潮av一区| 天天操天天是| 国产精品99爱免费视频| 国产精品白浆流出视频| 91涩漫在线观看c| 99热免费在线| 免费a在线看| 中文字幕在线免费看| 97国产视频| wwww亚洲| 午夜av在线播放| 国产经典av| www狠狠操| 丁香花在线电影| 国产羞羞视频| 在线激情网站| 福利资源在线久| 精品一区二区三区免费站| wwwww在线观看免费视频| 狠狠操天天操夜夜操| 国产天堂在线观看| 日本一级理论片在线大全| 国内自拍视频在线观看| 国产小视频福利在线| av中文天堂在线| 国产黄色片在线观看| 九色福利视频| 樱花草在线观看www| 91xxx在线观看|