Js基礎 執行上下文 執行棧

2021-10-20 14:35:18 字數 1560 閱讀 8631

什麼是執行上下文

執行上下文型別

全域性執行上下文:

建立階段:

建立乙個全域性執行上下文環境:

建立函式執行上下文環境:當函式被呼叫,但未執行任何其內部**之前,會做以下三件事

執行階段:執行變數賦值、**執行。

**階段:執行上下文出棧等待虛擬機器**執行上下文。

變數宣告提公升:建立上下文執行環境時,js會預解析變數、函式,因此在執行階段時,就會產生變數宣告提公升的現象。

console.

log(a)

;// undefined

var a =

10;

函式宣告提公升:js預解析函式產生的現象。

建立乙個函式的方法有兩種:

//例1.函式宣告,預解析出來的是函式

sayhi()

;//不會報錯

function

sayhi()

//例2.函式表示式,預解析出來的是undefined,因為被當成變數

sayhi()

;//報錯,因為sayhi不是函式

varsayhi

=function()

函式、變數同名的情況,函式提公升優先順序比變數提公升要高,且不會被變數宣告覆蓋,但是會被變數賦值覆蓋。

//例1:

var a =4;

functiona(

)console.

log(a)

//得到4,說明函式宣告會被變數賦值覆蓋。

//例2:

functiona(

)var a;

console.

log(a)

//得:function a();說明函式宣告不會被變數宣告覆蓋。

幾個關鍵點:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-qep60flx-1614484712532)(/users/mr.jiang/desktop/我的學習腦圖/typora相關/前端/執行上下文1.gif)]

執行棧案例:

function

fun1()

function

fun2()

function

fun3()

fun1()

;// 最後列印3

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-x6kb0hqf-1614484712533)(/users/mr.jiang/desktop/我的學習腦圖/typora相關/前端/執行上下文2.jpg)]

上述**執行按照如下步驟:

變數物件跟活動物件的區別

全域性變數物件(全域性執行上下文建立階段建立的物件)

函式變數物件(函式執行上下文建立階段建立的物件)

函式上下文的變數物件初始化只包括 arguments 物件;

在進入執行上下文時會給變數物件新增形參、函式宣告、變數宣告等初始的屬性值(js預解析階段);

在**執行階段,會再次修改變數物件的屬性值;

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

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

JS執行上下文

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

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

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