日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系

發(fā)布時間:2024/9/16 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本系列用了大量的篇幅講解了上下文環(huán)境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環(huán)境絕對不是一回事兒。
再說明之前,咱們先用簡單的語言來概括一下這兩個的區(qū)別。
00 上下文環(huán)境:
可以理解為一個看不見摸不著的對象(有若干個屬性),雖然看不見摸不著,但確實(shí)實(shí)實(shí)在在存在的,因?yàn)樗械淖兞慷荚诶锩娲鎯χ?#xff0c;要不然咱們定義的變量在哪里存?
另外,對于函數(shù)來說,上下文環(huán)境是在調(diào)用時創(chuàng)建的,這個很好理解。拿參數(shù)做例子,你不調(diào)用函數(shù),我哪兒知道你要給我傳什么參數(shù)?
01 作用域:
首先,它很抽象。第二,記住一句話:除了全局作用域,只有函數(shù)才能創(chuàng)建作用域。創(chuàng)建一個函數(shù)就創(chuàng)建了一個作用域,無論你調(diào)用不調(diào)用,函數(shù)只要創(chuàng)建了,它就有獨(dú)立的作用域,就有自己的一個“地盤”。
02 兩者:
一個作用域下可能包含若干個上下文環(huán)境。有可能從來沒有過上下文環(huán)境(函數(shù)從來就沒有被調(diào)用過);有可能有過,現(xiàn)在函數(shù)被調(diào)用完畢后,上下文環(huán)境被銷毀了;有可能同時存在一個或多個(閉包)。
上面的文字不理解沒關(guān)系,且看下面的例子。
第一,除了全局作用域外,每個函數(shù)都要創(chuàng)建一個作用域。作用域之間的變量是相互獨(dú)立的。因此,全局作用域中的x和fn作用域中的x,兩者毫無關(guān)系,互不影響,和平相處。

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

第三,程序執(zhí)行到第17行,調(diào)用fn(5),會產(chǎn)生fn(5)的上下文環(huán)境,并壓棧,并設(shè)置為活動狀態(tài)。

第四,執(zhí)行完第17行,fn(5)的返回值賦值給了f1。此時執(zhí)行上下文環(huán)境又重新回到全局,但是fn(5)的上下文環(huán)境不能就此銷毀,因?yàn)槠渲杏虚]包的引用(可翻看前面文章,此處不再贅述)。

第五,繼續(xù)執(zhí)行第18行,再次調(diào)用fn函數(shù)——fn(10)。產(chǎn)生fn(5)的上下文環(huán)境,并壓棧,并設(shè)置為活動狀態(tài)。但是此時fn(5)的上下文環(huán)境還在內(nèi)存中——一個作用域下同時存在兩個上下文環(huán)境。

講到這里,重點(diǎn)已經(jīng)講出來了,之后的場景這里就不再贅述了。

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

總結(jié)

以上是生活随笔為你收集整理的深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。