Mark JS中的上下文

2022-07-30 04:45:18 字數 1987 閱讀 7940

執行上下文的**被分成兩個基本的階段來處理:

進入執行上下文

執行**

變數物件的修改變化與這兩個階段緊密相關。

注:這2個階段的處理是一般行為,和上下文的型別無關(也就是說,在全域性上下文和函式上下文中的表現是一樣的)。

進入執行上下文

當進入執行上下文(**執行之前)時,vo裡已經包含了下列屬性(前面已經說了):

讓我們看乙個例子:

function

test(a, b)

var e = function

_e() {};

(function

x() {});}

test(10); //

call

當進入帶有引數10的test函式上下文時,ao表現為如下:

ao(test) =;

注意,ao裡並不包含函式「x」。這是因為「x」 是乙個函式表示式(functionexpression, 縮寫為 fe) 而不是函式宣告,函式表示式不會影響vo。 不管怎樣,函式「_e」 同樣也是函式表示式,但是就像我們下面將看到的那樣,因為它分配給了變數 「e」,所以它可以通過名稱「e」來訪問。 函式宣告functiondeclaration與函式表示式functionexpression 的不同,可以參考前面的專題文章。

這之後,將進入處理上下文**的第二個階段 — 執行**。

**執行

這個週期內,ao/vo已經擁有了屬性(不過,並不是所有的屬性都有值,大部分屬性的值還是系統預設的初始值undefined )。還是前面那個例子,ao/vo在**解釋期間被修改如下:

ao['c'] = 10;

ao['e'] = ;

再次注意,因為functionexpression「_e」儲存到了已宣告的變數「e」上,所以它仍然存在於記憶體中。而functionexpression 「x」卻不存在於ao/vo中,也就是說如果我們想嘗試呼叫「x」函式,不管在函式定義之前還是之後,都會出現乙個錯誤「x is not defined」,未儲存的函式表示式只有在它自己的定義或遞迴中才能被呼叫。

另乙個經典例子:

alert(x); //

function

var x = 10;

alert(x);

//10

x = 20;

function

x() {};

alert(x);

//20

為什麼第乙個alert 「x」 的返回值是function,而且它還是在「x」 宣告之前訪問的「x」 的?為什麼不是10或20呢?因為,根據規範函式宣告是在當進入上下文時填入的; 同意週期,在進入上下文的時候還有乙個變數宣告「x」,那麼正如我們在上乙個階段所說,變數宣告在順序上跟在函式宣告和形式引數宣告之後,而且在這個進入上下文階段,變數宣告不會干擾vo中已經存在的同名函式宣告或形式引數宣告,因此,在進入上下文時,vo的結構如下:

vo ={};

vo['x'] = //

找到var x = 10;

//如果function "x"沒有已經宣告的話

//這時候"x"的值應該是undefined

//但是這個case裡變數宣告沒有影響同名的function的值

vo['x'] = function>

緊接著,在執行**階段,vo做如下修改:

vo['x'] = 10;

vo['x'] = 20;

我們可以在第

二、三個alert看到這個效果。

在下面的例子裡我們可以再次看到,變數是在進入上下文階段放入vo中的。(因為,雖然else部分**永遠不會執行,但是不管怎樣,變數「b」仍然存在於vo中。)

if (true

) else

alert(a); //1

alert(b); //

undefined,不是b沒有宣告,而是b的值是undefined

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...

全域性上下文與上下文

全域性上下文由main函式載入系統的主架構和主事件迴圈和全域性資料構成。是上帝創造世界時,建立的基礎事物。萬物之始,大道至簡,衍化至繁。全域性上下文代表著程式執行所需要的基礎資源。是程式執行的基礎。全域性上下文的特徵是在程式執行期間常駐記憶體。全域性上下文的生命週期和應用程式的生命週期相同。與應用程...