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