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词法分析的主要内容,如果未能解决你的问题,请参考以下文章

Js词法分析__return [js面试题]

Js词法分析__return [js面试题]

编译原理 实验一 java语言实现对C语言词法分析

编译原理 实验一 java语言实现对C语言词法分析

window下是否存在number,毫无节操的词法分析[js面试题]

window下是否存在number,毫无节操的词法分析[js面试题]