(9)——簡述【執(zhí)行上下文】下

2018-02-24 15:45 更新

繼續(xù)上一篇文章(http://www.cnblogs.com/wangfupeng1988/p/3986420.html)的內(nèi)容。

上一篇我們講到在全局環(huán)境下的代碼段中,執(zhí)行上下文環(huán)境中有如何數(shù)據(jù):

  • 變量、函數(shù)表達(dá)式——變量聲明,默認(rèn)賦值為undefined;
  • this——賦值;
  • 函數(shù)聲明——賦值;

如果在函數(shù)中,除了以上數(shù)據(jù)之外,還會有其他數(shù)據(jù)。先看以下代碼:

以上代碼展示了在函數(shù)體的語句執(zhí)行之前,arguments變量和函數(shù)的參數(shù)都已經(jīng)被賦值。從這里可以看出,函數(shù)每被調(diào)用一次,都會產(chǎn)生一個新的執(zhí)行上下文環(huán)境。因?yàn)椴煌恼{(diào)用可能就會有不同的參數(shù)。

另外一點(diǎn)不同在于,函數(shù)在定義的時候(不是調(diào)用的時候),就已經(jīng)確定了函數(shù)體內(nèi)部自由變量的作用域。至于“自由變量”和“作用域”是后面要專門拿出來講述的重點(diǎn),這里就先點(diǎn)到為止。用一個例子說明一下:

好了,總結(jié)完了函數(shù)的附加內(nèi)容,我們就此要全面總結(jié)一下上下文環(huán)境的數(shù)據(jù)內(nèi)容。

全局代碼的上下文環(huán)境數(shù)據(jù)內(nèi)容為:

普通變量(包括函數(shù)表達(dá)式),如: var a = 10; 聲明(默認(rèn)賦值為undefined)
函數(shù)聲明,如: function fn() { } 賦值
this 賦值
如果代碼段是函數(shù)體,那么在此基礎(chǔ)上需要附加:
參數(shù) 賦值
arguments 賦值
自由變量的取值作用域 賦值

給執(zhí)行上下文環(huán)境下一個通俗的定義——在執(zhí)行代碼之前,把將要用到的所有的變量都事先拿出來,有的直接賦值了,有的先用undefined占個空。

了解了執(zhí)行上下文環(huán)境中的數(shù)據(jù)信息,你就不用再去死記硬背那些可惡的面試題了。理解了就不用背誦!

講完了上下文環(huán)境,又來了新的問題——在執(zhí)行js代碼時,會有數(shù)不清的函數(shù)調(diào)用次數(shù),會產(chǎn)生許多個上下文環(huán)境。這么多上下文環(huán)境該如何管理,以及如何銷毀而釋放內(nèi)存呢?下一節(jié)將通過“執(zhí)行上下文?!眮斫忉屵@個問題。

不過別著急,在解釋“執(zhí)行上下文?!敝?,還需要把this說一下,this還是挺重要的。

說完this,接著說執(zhí)行上下文棧。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號