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.函數表達式在執行階段操作轉載于:https://www.cnblogs.com/jiaqi1719/p/10019689.html
總結
- 上一篇: 深度学习(花书)
- 下一篇: 防火墙和网关哪个更安全?