在函式執行時, 會先進行詞法分析(預編譯) 預編譯做哪些工作?
1:分析引數
2:分析變數宣告
3:分析函式宣告
如何分析變數宣告?
答:對於var 宣告的變數, 以var str = 'local'為例, 分為分析過程 和 執行過程.
先分析, 後執行.
先分析 var str; ,即僅僅宣告乙個str變數,str變數此時,沒有賦值,值是undefined
然後再進行 執行過程.
var str = 'global';function
t()
t();
活動物件/啟用物件, active object
函式的變數 有其作用域,
即, 引用某變數時,在某個範圍內查詢該變數, 這個範圍,又在哪兒?
在ao上找
在函式呼叫的瞬間,會產生乙個ao, 這個ao物件,的屬性, 即儲存著該函式所能引用到的變數.
functionfn1(age,hei)
fn1(32);
functionfn1(age,hei)
}fn1(32);
/*//詞法分析過程
ao:{}
ao:ao:
ao:,hei:undefined}
// 執行:
alert(age); --->ao.age--->函式
*/
functiont(age)
t(99);
ao:
//詞法分析形參得到
ao: //
實參賦值 ao.age屬性
ao: //
修改ao.age的值
functiona(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...