麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

深入理解javascript原型和閉包(16)——補充:上下文環境和作用域的關系

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

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

本系列用了大量的篇幅講解了上下文環境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環境絕對不是一回事兒。

 

再說明之前,咱們先用簡單的語言來概括一下這兩個的區別。

00 上下文環境:

可以理解為一個看不見摸不著的對象(有若干個屬性),雖然看不見摸不著,但確實實實在在存在的,因為所有的變量都在里面存儲著,要不然咱們定義的變量在哪里存?

另外,對于函數來說,上下文環境是在調用時創建的,這個很好理解。拿參數做例子,你不調用函數,我哪兒知道你要給我傳什么參數?

01 作用域:

首先,它很抽象。第二,記住一句話:除了全局作用域,只有函數才能創建作用域。創建一個函數就創建了一個作用域,無論你調用不調用,函數只要創建了,它就有獨立的作用域,就有自己的一個“地盤”。

02 兩者:

一個作用域下可能包含若干個上下文環境。有可能從來沒有過上下文環境(函數從來就沒有被調用過);有可能有過,現在函數被調用完畢后,上下文環境被銷毀了;有可能同時存在一個或多個(閉包)。

 

上面的文字不理解沒關系,且看下面的例子。

第一,除了全局作用域外,每個函數都要創建一個作用域。作用域之間的變量是相互獨立的。因此,全局作用域中的x和fn作用域中的x,兩者毫無關系,互不影響,和平相處。

 

第二,程序執行之前,會生成全局上下文環境,并在程序執行時,對其中的變量賦值。

 

第三,程序執行到第17行,調用fn(5),會產生fn(5)的上下文環境,并壓棧,并設置為活動狀態。

 

第四,執行完第17行,fn(5)的返回值賦值給了f1。此時執行上下文環境又重新回到全局,但是fn(5)的上下文環境不能就此銷毀,因為其中有閉包的引用(可翻看前面文章,此處不再贅述)。

 

第五,繼續執行第18行,再次調用fn函數——fn(10)。產生fn(10)的上下文環境,并壓棧,并設置為活動狀態。但是此時fn(5)的上下文環境還在內存中——一個作用域下同時存在兩個上下文環境。

講到這里,重點已經講出來了,之后的場景這里就不再贅述了。

目的還是希望大家能通過這個例子,來理清楚上下文環境和作用域的關系。當然,也不是非得像個學院派似的一字一文的把概念說出來,簡單理解一下,對用閉包是有幫助的。


上一篇:移動端touch事件

下一篇:URI和URL的區別

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产一区二区三区四区阿崩 | 美国一级免费视频 | 国产成人综合在线视频 | 久久久久久久久成人 | 欧美一级黄色免费看 | 97zyz成人免费视频 | 成人免费久久网 | 91久久国产露脸精品国产护士 | 91精品国产综合久久男男 | 久久精品亚洲欧美日韩精品中文字幕 | 成人做爰s片免费看网站 | 黄色羞羞视频在线观看 | 欧美视频国产 | 毛片在线视频观看 | 亚洲欧洲日产v特级毛片 | 国产91九色 | 欧美人与牲禽动交精品一区 | 亚洲欧美成aⅴ人在线观看 免费看欧美黑人毛片 | 九九热视频免费在线观看 | 在线一级片 | 国产成人av免费观看 | 亚洲午夜精品视频 | 久久久久久久久亚洲精品 | 国产亚洲精品久久久久久久久 | 中文区永久区 | 亚洲一区二区三区精品在线观看 | 欧美成人性生活片 | 一本视频在线观看 | 日日草天天干 | 在线成人www免费观看视频 | 毛片网站视频 | 国产免费观看a大片的网站 欧美成人一级 | 夜夜夜操操操 | 蜜桃网站在线 | 久久精品一区二区三区四区五区 | 久久综合网址 | 国产成人在线网址 | 污视频在线免费 | 热久久91| 免费在线观看亚洲 | 亚洲成人精品久久久 |