1、**開始執行,建立乙個全域性執行上下文來執行全域性**:
2、執行階段,變數賦值完成:
3、建立乙個新的函式執行上下文來執行該函式**:
4、函式變數賦值完成,執行上下文進入執行階段:
複製**
我們用偽**來描述上述**中執行上下文的建立過程:
複製**
globalexectioncontext =
outer: // 對外部環境的引用為null
},variableenvironment:
outer: // 對外部環境對引用為null}}
functionexectioncontext = ,
},outer: // 對外部環境對引用
},variableenvironment: ,
outer: // 對外部環境對引用}}
不知道你有沒有發現,在執行上下文建立階段,函式宣告與var宣告的變數在建立階段已經被賦予了乙個值,var宣告被設定為了undefined,函式被設定為了自身函式,而let const被設定為未初始化。
現在你總知道變數提公升與函式宣告提前是怎麼回事了吧,以及為什麼let const為什麼有暫時性死域,這是因為作用域建立階段js引擎對兩者初始化賦值不同。
上下文除了建立階段外,還有執行階段,這點大家應該好理解,**執行時根據之前的環境記錄對應賦值,比如早期var在建立階段為undefined,如果有值就對應賦值,像let const值為未初始化,如果有值就賦值,無值則賦予undefined。
js執行上下文與執行上下文棧
在了解js的執行上下文物件與執行上下文棧之前,我們要先了解兩個概念 即變數提公升跟函式提公升 變數提公升 通過var定義的變數,在定義語句之前我們就可以直接訪問到,不過它的值是undefined 函式提公升 通過function定義的函式,在函式定義語句前,我們就可以直接呼叫 變數提公升與函式提公升...
JS執行上下文
執行上下文,即context,也不知道是誰翻譯的,不少的文獻 書籍用的都是這個詞。還記得第一次接觸這個詞時的惆悵 迷惘 不知所措,扶了扶眼鏡,翻開大辭典,還是翻譯成環境比較接地氣。js執行上下文,即js的執行環境。當我們的 執行時,會進入到不同的執行上下文,即不同的環境。在不同的環境中,有著不同的 ...
JS的執行上下文
執行上下文時是 執行時的環境,js 在執行前進行編譯,那麼會生成兩部分,一部分是可執行的 而另一部分則是執行上下文。用於跟蹤 執行的運 況。執行步驟如下 全域性執行上下文 函式執行上下文和 eval 執行上下文 執行上下文所包含的內容是在不斷的變化的。它主要分為了三個不同的階段。分別是es3階段,e...