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

2021-10-10 16:48:06 字數 2526 閱讀 8296

一、變數提公升和函式提公升

變數宣告提公升

函式宣告提公升

//面試題 : 輸出 undefined

//undefined 變數提公升

fn2(

)//可呼叫 函式提公升

fn3(

)//不能 變數提公升

二、執行上下文

**分類(根據位置分)

全域性執行上下文

開始執行全域性**

函式執行上下文

開始執行函式體**

三、執行上下文棧

在全域性**執行前,js引擎就會建立乙個棧來儲存管理所有的執行上下文物件

在全域性執行上下文(window)確定後, 將其新增到棧中(壓棧)

在函式執行上下文建立後,將其新增到棧中(壓棧)

在當前函式執行完後,將棧頂的物件移除(出棧)

當所有的**執行完後,棧中只剩下window

//1. 進入全域性執行上下文

var a =10;

varbar

=function

(x);

varfoo

=function

(y);

bar(10)

//2. 進入bar函式執行上下文

6. 例題:

console.

log(

'gb: '

+ i)

;var i =1;

foo(1)

;function

foo(i)

console.

log(

'fb:'

+ i)

;foo

(i +1)

;//遞迴呼叫: 在函式內部呼叫自己

console.

log(

'fe:'

+ i)

}console.

log(

'ge: '

+ i)

問:

gb: undefined

fb: 1

fb: 2

fb: 3

fe: 3

fe: 2

fe: 1

ge: 1

5次

四、面試題

先執行變數提公升, 再執行函式提公升。

1. 測試題1:

functiona(

)var a;

console.

log(

typeof a)

;// 'function'

2. 測試題2:
f(!

(b in window)

)console.

log(b)

;// undefined

3. 測試題3:
var c =1;

function

c(c)

//1c(

2)// 報錯

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

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

JS執行上下文

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

js高階 執行上下文棧

就是用來存全域性上下文物件和函式上下文物件的棧容器。在全域性 執行之前,js引擎就會建立乙個棧容器來儲存管理所有的執行上下文物件。在全域性執行上下文 window 確定後,將其新增到棧中 壓棧 在函式執行上下文建立後,將其新增到棧中壓棧 在當前函式執行完後,將棧頂的物件移除 出棧 當所有的 執行完後...