JS執行上下文

2021-09-24 07:27:10 字數 1024 閱讀 7235

執行上下文,即context,也不知道是誰翻譯的,不少的文獻、書籍用的都是這個詞。還記得第一次接觸這個詞時的惆悵、迷惘、不知所措,扶了扶眼鏡,翻開大辭典,還是翻譯成環境比較接地氣。js執行上下文,即js的執行環境。

當我們的**執行時,會進入到不同的執行上下文,即不同的環境。在不同的環境中,有著不同的 scope(作用域),**所能訪問到的資源也就不同。 在 js 中,執行環境有如下三種情況:

某個執行環境中的所有**執行完畢後,該環境被銷毀,儲存在環境中的變數和函式也隨之銷毀。這些變數和函式儲存在乙個叫做變數物件的物件(variableobject)中,關於變數物件將在變數物件與作用域鏈一文作詳細**。

執行環境的生命週期大概分為兩個階段,即建立階段和執行階段:

1. 建立階段

由此,乙個執行環境可以由包含作用域鏈、變數物件和 this 指標的物件組成:

executioncontextobj = ,

variableobject: {},

this: {}

}複製**

2. **執行階段

瀏覽器中的直譯器被實現為單執行緒,同一時間只能處理乙個任務,js 程式中多個執行環境會以棧的方式來處理,這個棧叫做執行棧。棧底永遠都是全域性環境(視窗關閉時彈出),棧頂就是當前正在執行的環境。前述三種情況都會建立執行環境,執行環境建立時會被壓入棧頂,成為乙個執行(活動)的環境,位於棧頂的環境執行完畢後就從棧頂彈出,並將環境控制權交給呼叫者(之前的棧),而呼叫者繼續執行(或啟用其他環境),直到它的執行環境結束。ecmascript 程式中的執行流正是由這個方便的機制控制著。

來看下面的例子:

var firstname = 'snow';

function

getname

() var name = fullname();

return name;

}getname();

複製**

其執行棧變化過程如下:

js執行上下文與執行上下文棧

在了解js的執行上下文物件與執行上下文棧之前,我們要先了解兩個概念 即變數提公升跟函式提公升 變數提公升 通過var定義的變數,在定義語句之前我們就可以直接訪問到,不過它的值是undefined 函式提公升 通過function定義的函式,在函式定義語句前,我們就可以直接呼叫 變數提公升與函式提公升...

JS 執行上下文棧

繼續上文的內容。執行全域性 時,會產生乙個執行上下文環境,每次呼叫函式都又會產生執行上下文環境。當函式呼叫完成時,這個上下文環境以及其中的資料都會被消除,再重新回到全域性上下文環境。處於活動狀態的執行上下文環境只有乙個。其實這是乙個壓棧出棧的過程 執行上下文棧。如下圖 可根據以下 來詳細介紹上下文棧...

JS的執行上下文

執行上下文時是 執行時的環境,js 在執行前進行編譯,那麼會生成兩部分,一部分是可執行的 而另一部分則是執行上下文。用於跟蹤 執行的運 況。執行步驟如下 全域性執行上下文 函式執行上下文和 eval 執行上下文 執行上下文所包含的內容是在不斷的變化的。它主要分為了三個不同的階段。分別是es3階段,e...