1. 程式人生 > >js詞法分析

js詞法分析

javascript詞法分析 函式在執行的瞬間,生成一個活動物件(Active Object),簡稱AO; 具體分為兩個階段: 一.分析階段 JavaScript程式碼執行前有一個類似編譯的過程即詞法分析,詞法分析主要有三個步驟:   1.分析引數 2.分析變數宣告 3.分析函式宣告 二.執行階段 (即做賦值等操作)   具體例子及簡單分析步驟如下: *1.無引數情況*
1 function func() {
2       console.log(age);
3 var age = 25; 4 console.log(age); 5 function age() { 6 } 7 console.log(age); 8 } 9 func();
1.1詳細分析步驟 // 分析階段 形成活動物件AO, 假設 AO = {}; 1)分析引數 a.分析形參(沒有跳過) b.分析實參(沒有跳過) 2)分析變數宣告 a. AO.age = undefined;(在函式分析階段預設往AO活動物件新增屬性值為undefined); 3) 分析函式宣告 a. AO.age = function(){};(如果AO中已存在age屬性直接做覆蓋操作,如果不存在則新建age屬性進AO) // 執行階段 1.列印 function() {}; 2.age賦值25 AO.age = 25; 3.列印 25; 4.列印 25;   **//以下例子同上類似步驟簡寫分析** *2.有引數情況*
1
function func(age) { 2 console.log(age); 3 var age = 25; 4 console.log(age); 5 function age() { 6 } 7 console.log(age); 8 } 9 func(18);
2.1 // 分析階段 1)分析引數 a. AO.age = undefined; b. AO.age = 18; 2)分析變數宣告 AO.age = 18; (AO中已存在age屬性) 3.分析函式宣告 AO.age = function() {}; //執行階段 1.列印 function() {}; 2.賦值後列印 AO.age = 25; 3.列印 25;   *3.報錯情況*
 1
function func(age) { 2 var age; 3 console.log(age); 4 var age = 25; 5 console.log(age); 6 function age() { 7 console.log(age); 8 } 9 age(); 10 console.log(age); 11 12 } 13 func(18);
3.1 // 分析階段 1.分析引數 a. AO.age = undefined; b. AO.age = 18; 2.分析變數宣告 AO.age = 18;(AO中已存在,保持不變); 3.分析函式宣告 AO.age = function() {}; (存在age屬性覆蓋)   //執行階段 1.列印 function() {}; 2.賦值後列印 25; 3. age is not a function;(執行函式時AO的age已經為25) 4. 報錯不執行;   *4.變數提升情況*
1 var name = "test";
2 function t() {
3     console.log(name);
4     var name = "test1";
5     console.log(name);
6 }
7 t();
類似寫法 var name = "test"; function t() {     var name;     console.log(name);     name = "test1";     console.log(name); } t();

4.1

// 分析階段 1.分析引數(沒有引數跳過) 2.分析變數宣告 AO.name = undefined; 3.分析函式宣告(沒有跳過)   //執行階段 1.列印 undefined; 2.賦值後列印 test1;   注: 1.函式宣告在分析階段操作 2.函式表示式在執行階段操作