作用域鏈

作用域鏈(scope chain)

理解:

1.函數(shù)在執(zhí)行的過(guò)程中,先從自己內(nèi)部找變量
2.如果找不到抓督,再?gòu)膭?chuàng)建當(dāng)前函數(shù)所在的作用域去找, 以此往上
3.注意找的是變量的當(dāng)前的狀態(tài)

作用域鏈決定了哪些數(shù)據(jù)能被函數(shù)訪問(wèn)。當(dāng)一個(gè)函數(shù)創(chuàng)建后束亏,它的作用域鏈會(huì)被創(chuàng)建此函數(shù)的作用域中可訪問(wèn)的數(shù)據(jù)對(duì)象填充铃在。

當(dāng)某個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境及相應(yīng)的作用域鏈枪汪。然后涌穆,使用arguments和其他命名參數(shù)的值來(lái)初始化函數(shù)的活動(dòng)對(duì)象。但在作用域鏈中雀久,外部函數(shù)的活動(dòng)對(duì)象始終處于第二位宿稀,外部函數(shù)的外部函數(shù)對(duì)象處于第三位……直至作為作用域終點(diǎn)的全局執(zhí)行環(huán)境

作用域鏈的前端始終是當(dāng)前執(zhí)行的代碼所在環(huán)境的變量對(duì)象。如果這個(gè)環(huán)境是函數(shù)赖捌,則將其活動(dòng)對(duì)象作為變量對(duì)象祝沸。活動(dòng)對(duì)象在最開(kāi)始時(shí)只包含一個(gè)變量越庇,即arguments對(duì)象罩锐。作用域鏈的下一個(gè)變量對(duì)象來(lái)自包含環(huán)境,而在下一個(gè)變量對(duì)象則來(lái)自下一個(gè)包含環(huán)境卤唉。這樣一直延續(xù)到全局執(zhí)行環(huán)境涩惑;全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象。

這里面有很多概念桑驱,比如什么是執(zhí)行環(huán)境竭恬、變量對(duì)象等。

執(zhí)行環(huán)境(Execution Context)

執(zhí)行環(huán)境是JavaScript中的重要概念之一熬的。執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問(wèn)的其他數(shù)據(jù)痊硕,決定了他們各自的行為。每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象押框,環(huán)境中定義的所有變量和函數(shù)都保存在這個(gè)對(duì)象中岔绸。

全局執(zhí)行環(huán)境是最外圍的一個(gè)執(zhí)行環(huán)境。在Web瀏覽器中橡伞,全局執(zhí)行環(huán)境被認(rèn)為是window對(duì)象盒揉,因此所有全局變量和函數(shù)都是作為window對(duì)象的屬性和方法創(chuàng)建的。某個(gè)執(zhí)行環(huán)境中的所有代碼執(zhí)行完畢后兑徘,該環(huán)境被銷毀预烙,保存在其中的所有變量和函數(shù)定義也隨之銷毀(全局執(zhí)行環(huán)境知道應(yīng)用程序退出–例如關(guān)閉網(wǎng)頁(yè)或?yàn)g覽器—時(shí)才會(huì)被銷毀)

每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境。當(dāng)執(zhí)行流進(jìn)入一個(gè)函數(shù)時(shí)道媚,函數(shù)的環(huán)境就會(huì)被推入一個(gè)環(huán)境棧中扁掸。而在函數(shù)執(zhí)行后翘县,棧將其環(huán)境彈出,把控制權(quán)返回給之前的執(zhí)行環(huán)境谴分。

執(zhí)行環(huán)境的建立分為兩個(gè)階段:進(jìn)入執(zhí)行上下文(創(chuàng)建階段)和執(zhí)行階段(激活/執(zhí)行階段)

(1)進(jìn)入上下文階段:發(fā)生在函數(shù)調(diào)用時(shí)锈麸,但在執(zhí)行具體代碼之前。具體完成創(chuàng)建作用域鏈牺蹄;創(chuàng)建變量忘伞、函數(shù)和參數(shù)以及求this的值

(2)執(zhí)行代碼階段:主要完成變量賦值、函數(shù)引用和解釋/執(zhí)行其他代碼

總的來(lái)說(shuō)可以將執(zhí)行上下文看作是一個(gè)對(duì)象

變量對(duì)象(Variable Object)

每一個(gè)執(zhí)行環(huán)境都對(duì)應(yīng)一個(gè)變量對(duì)象沙兰,在該執(zhí)行環(huán)境中定義的所有變量和函數(shù)都存放在其對(duì)應(yīng)的變量對(duì)象中氓奈。

(1)進(jìn)入執(zhí)行上下文時(shí),VO的初始化過(guò)程如下:

函數(shù)的形參:變量對(duì)象的一個(gè)屬性鼎天,其屬性名就是形參的名字舀奶,其值就是實(shí)參的值;對(duì)于沒(méi)有傳遞的參數(shù)斋射,其值為undefined育勺;

函數(shù)聲明:變量對(duì)象的一個(gè)屬性,其屬性名和屬性值都是函數(shù)對(duì)象創(chuàng)建出來(lái)的罗岖,如果變量對(duì)象已經(jīng)辦好了相同名字的屬性涧至,則替換它的值

變量聲明:變量對(duì)象的一個(gè)屬性,其屬性名即為變量名桑包,其值為undefined南蓬;如果變量名和已經(jīng)聲明的函數(shù)名或者函數(shù)的參數(shù)名,則不會(huì)影響已經(jīng)存在的屬性

(2)執(zhí)行代碼階段哑了,變量對(duì)象中的一些屬性u(píng)ndefined值將會(huì)確定

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赘方,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垒手,更是在濱河造成了極大的恐慌,老刑警劉巖倒信,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件科贬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鳖悠,警方通過(guò)查閱死者的電腦和手機(jī)榜掌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乘综,“玉大人憎账,你說(shuō)我怎么就攤上這事】ǔ剑” “怎么了胞皱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵邪意,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我反砌,道長(zhǎng)雾鬼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任宴树,我火速辦了婚禮策菜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酒贬。我一直安慰自己又憨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布锭吨。 她就那樣靜靜地躺著蠢莺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耐齐。 梳的紋絲不亂的頭發(fā)上浪秘,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音埠况,去河邊找鬼耸携。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辕翰,可吹牛的內(nèi)容都是我干的夺衍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼喜命,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沟沙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起壁榕,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤矛紫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后牌里,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颊咬,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年牡辽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喳篇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡态辛,死狀恐怖麸澜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奏黑,我是刑警寧澤炊邦,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布编矾,位于F島的核電站,受9級(jí)特大地震影響铣耘,放射性物質(zhì)發(fā)生泄漏洽沟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一蜗细、第九天 我趴在偏房一處隱蔽的房頂上張望裆操。 院中可真熱鬧,春花似錦炉媒、人聲如沸踪区。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缎岗。三九已至,卻和暖如春白粉,著一層夾襖步出監(jiān)牢的瞬間传泊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工鸭巴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眷细,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓鹃祖,卻偏偏與公主長(zhǎng)得像溪椎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恬口,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 變量 變量分為全局變量和局部變量校读,全局變量就是指該變量的作用域?yàn)楫?dāng)前文檔,也就是說(shuō)全局變量在當(dāng)前文檔的所有Java...
    jrg陳咪咪sunny閱讀 344評(píng)論 0 1
  • 作用域與作用域鏈 一祖能、作用域 一個(gè)變量的作用域(scope)是程序源代碼中定義的這個(gè)變量的區(qū)域歉秫。 在JS中使用的是...
    e81bcd463937閱讀 555評(píng)論 0 2
  • 一、作用域 一個(gè)變量的作用域(scope)是程序源代碼中定義的這個(gè)變量的區(qū)域养铸。 1. 在JS中使用的是詞法作用域(...
    掙脫吧小白閱讀 423評(píng)論 0 0
  • 01 高三的晚上揭厚。 我獨(dú)自在燈下看著高一高二的化學(xué)筆記却特,感覺(jué)眼前全是Z老師當(dāng)初講課的樣子扶供,那么鮮明那么清晰筛圆。 高二...
    酒心巧克力小姐閱讀 291評(píng)論 0 0
  • 函數(shù)的定義與調(diào)用 無(wú)參數(shù)函數(shù),有返回值(返回值類型String) 多參數(shù)函數(shù),有返回值(返回值類型String) ...
    小驢拉磨閱讀 163評(píng)論 0 0