js詞法分析

2022-03-08 22:54:58 字數 1574 閱讀 6434

在函式執行時, 會先進行詞法分析(預編譯) 預編譯做哪些工作?

1:分析引數

2:分析變數宣告

3:分析函式宣告

如何分析變數宣告?

答:對於var 宣告的變數, 以var str = 'local'為例, 分為分析過程 和 執行過程.

先分析, 後執行.

先分析  var str;     ,即僅僅宣告乙個str變數,str變數此時,沒有賦值,值是undefined

然後再進行 執行過程.

var str = 'global';

function

t()

t();

活動物件/啟用物件, active object  

函式的變數 有其作用域,  

即, 引用某變數時,在某個範圍內查詢該變數,   這個範圍,又在哪兒?

在ao上找

在函式呼叫的瞬間,會產生乙個ao,   這個ao物件,的屬性, 即儲存著該函式所能引用到的變數.

function

fn1(age,hei)

fn1(32);

function

fn1(age,hei)

}fn1(32);

/*//詞法分析過程

ao:{}

ao:ao:

ao:,hei:undefined}

// 執行:

alert(age); --->ao.age--->函式

*/

function

t(age)

t(99);

ao:

//詞法分析形參得到

ao: //

實參賦值 ao.age屬性

ao: //

修改ao.age的值

function

a(b)

function

b() b();

}a(1);

/*//詞法分析過程

a:ao:{}

a:ao:

a:ao:

b:ao {}

b:ao.b --->{}--->a:ao

// 執行:

alert(age); --->ao.age--->函式

*/

//

函式宣告 與函式表示式

//函式表示式

function

fn1(age,hei)

alert(age);

}//undefined, function

//function,function

//32, function (正確)

fn1(32);

//函式宣告

function

fn1(age,hei)

alert(age);

}//undefined, function

//function,function (正確)

//32, function

fn1(32);

js高階詞法分析

分析乙個js函式,首先從引數開始,函式在執行前首先生成active object物件 活動物件,下面簡稱為ao 用來儲存函式變數。第一步 分析引數,ao把引數名當作為自己屬性,初始值都為undefined,傳遞過來的引數值即為屬性值。第二步 分析函式內宣告的變數,即var宣告,如果引數內沒有var宣...

js作用域和詞法分析

都知道js中不存在類似於c 等語言的塊級作用域,例如for迴圈中定義的變數,其實是屬於當前物件下的屬性,同一物件下可以隨便訪問。只有函式可以限定乙個變數的作用範圍,即函式才是變數的作用域。對於函式的變數訪問時遵循作用域鏈的,即當前函式執行時會有乙個當前作用域,當飲用某個變數時,會先查詢當前作用域內是...

JS詞法結構

程式語言的詞法結構是一套基礎性規則,用來描述如何使用這門語言來編寫程式。注釋直接量 識別符號和保留字 分號js程式採用unicode字符集編寫,unicode是ascii和latin 1的超集,並支援地球上幾乎所有在用的語言。js是區分大小寫的語言,也就是說,關鍵字 變數 函式名 識別符號 iden...