JS學習之預解析(執行上下文)

2022-07-18 03:24:11 字數 2167 閱讀 7125

預解析

在一段js**拿過來真正一句一句執行之前,瀏覽器會做一些「準備工作」,就是執行上下文(預解析)

函式或者變數都會有提前解析的過程,js會把函式或者變數提前解析一下,解析到它們對應的作用域最開始的地方

步驟:1、先找var,function關鍵字以及引數

2、如果找到了var(宣告的變數、引數)會給他賦乙個undefined,如果找到了function,那會把整個函式都拿過來

3、把找到的東西放在對應作用域的最開始的位置

4、逐行執行**

/*

var c=undefined

function test()*/1

var c=10;

2function

test()

6 test(); //

107 console.log(c); //208

/*9原理:10

1、找到了var c=undefined test(){} 整個**塊

112、逐行解讀** c=10 函式test呼叫了

123、遇到乙個新的**塊,找var,沒有找到,逐行解讀**,console.log(c),往外找c

134、往下走c 被重新賦值 20

14*/

/*var d=undefined

function test1(d)

*/15

var d=12;

16function

test1(d)

20test1();

21 console.log(d); //

1222

/*23

1、找到var d=undefined

24function test1(d) 放在作用域最開始的地方

282、逐行解讀**,d被賦值12,函式test1()呼叫,

29有形參d,賦值var d=undefined 放在函式test1的最上面,

30d 被賦值24,注意是test1函式裡的作用域內的d,並不是外面的d,函式呼叫完就被釋放

31*/

32 /*

var e=13;

function test2(e)

*/33

var e=13;

34function

test2(e)

38test2(e);

39 console.log(e); //

1340

/*41

1、找var 跟函式

42var e=undefined

43function test2(e) 放在作用域的最前面

472、逐行解讀** e被賦值為 13

48函式呼叫,逐行走函式 test2內**

49函式test2**塊內預解析,有形參e,

50e=undefined 放在函式最開始的位置

51函式呼叫的時候有實參e,就是13 被傳進來

52所以console.log(e)為13 ,之後e 又被賦值為54,但注意是test2作用域內的e

53*/

函式預解析

1、函式宣告

可以被預解析,可以先呼叫再宣告

2、函式表示式

函式表示式不會被預解析,只能先宣告再呼叫,不能先呼叫再宣告(不然報錯)

1      test();  //

不會報錯

2function

test()5/*

6函式test()被預解析放在了作用域的最前面,所以可以呼叫7*/

8 test1(); //

報錯 test1 為undefined, undefined() 肯定報錯

9var test1=function

()

12//

找到了var test1放在了作用域最前面並被賦值 undefined ,但函式表示式的函式不會被預解析

13//

逐行解讀** undefined();肯定會報錯

我們總結一下,在「準備工作」中完成了哪些工作:

這三種資料的準備情況我們稱之為「執行上下文」或者「執行上下文環境」。

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

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

JS執行上下文

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

JS 執行上下文棧

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