js词法分析
Posted mb61c7285216674
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.函数表达式在执行阶段操作
以上是关于js词法分析的主要内容,如果未能解决你的问题,请参考以下文章