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

2021-10-07 09:04:59 字數 1103 閱讀 7556

在了解js的執行上下文物件與執行上下文棧之前,我們要先了解兩個概念 即變數提公升跟函式提公升

變數提公升 :通過var定義的變數,在定義語句之前我們就可以直接訪問到,不過它的值是undefined

函式提公升:  通過function定義的函式,在函式定義語句前,我們就可以直接呼叫

變數提公升與函式提公升都是js引擎的預處理產生的 ,先是變數提公升,然後才是函式提公升.

執行上下文物件

全域性執行上下文:( 確定執行上下文物件==>預處理==>執行** )

1. 在執行全域性**前將window確定為全域性執行上下文物件

2. 對全域性資料進行預處理:

對變數進行提公升,值設定為undefined.並新增為window物件的屬性

對函式進行提公升並賦值.新增為window物件的方法

將this賦值為window;

3. 最後開始執行全域性**

函式執行上下分: ( 呼叫函式==>建立函式執行上下文物件==>預處理==>執行函式體 )

1. 在呼叫函式,準備執行函式體**之前,建立對應的函式執行上下文物件  (虛擬的,存於棧中)

2. 對區域性資料進行預處理:

把實參賦值給形參,新增為該執行上下文物件的屬性

變數提公升

函式提公升

把this賦值給呼叫該函式的物件

3. 開始執行函式體**

執行上下文棧  :   (為了方便管理,js隱藏會建立乙個棧來統一管理執行上下文物件)

1.在全域性**執行前,js引擎建立乙個棧,用於管理所有的執行上下文物件

2. 全域性執行上下文物件(window)確定後,將其放入到棧中

3. 呼叫函式時,會建立乙個此函式的執行上下文物件,並放到棧中

4. 函式執行完,js引擎會將其對應的執行上下文物件從棧中移除

5. 所有的**執行完後,棧中只剩window

JS高階(6) 執行上下文與執行上下文棧

一 變數提公升和函式提公升 變數宣告提公升 函式宣告提公升 面試題 輸出 undefined undefined 變數提公升 fn2 可呼叫 函式提公升 fn3 不能 變數提公升 二 執行上下文 分類 根據位置分 全域性執行上下文 開始執行全域性 函式執行上下文 開始執行函式體 三 執行上下文棧 在...

提公升 執行上下文和執行上下文棧

提公升 1.變數宣告提公升 通過var定義 宣告 的變數,在之前就可以直接使用,但不會被賦值 值 undefined 2.函式宣告提公升 通過function宣告的函式,在之前就可以直接呼叫 函式表示式不能在定義前呼叫 值 函式定義 物件 3.問題 變數提公升和函式提公升怎麼產生的?變數提公升簡單理...

JS 執行上下文棧

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