欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

词法分析步骤

程序员文章站 2022-03-13 09:22:59
概念 词法分析: 一个函数能使用的局部变量,就从下面面的三步分析而来。 第一步:先分析参数 第二步:再分析变量声明 第三步:再分析函数声明 具体步骤: 0: 函数运行前的一瞬间,生成active o...
概念

词法分析:

一个函数能使用的局部变量,就从下面面的三步分析而来。

第一步:先分析参数

第二步:再分析变量声明

第三步:再分析函数声明

具体步骤:

0:

函数运行前的一瞬间,生成active object(活动对象),下称ao

1:

1.1 函数声明的参数形成ao的属性,值全是undefined

1.2 接收实参,形成ao相应属性的值。

2:

分析变量声明声明声明,var age;

如果ao上还没有age属性,则添加ao属性,值是undefined

如果ao上已有age属性,则不做任何变化。

3:

分析函数声明,如:function foo(){}

则把函数赋给ao.foo属性

注:如果此前有foo属性,则会被无情的覆盖。

示例1

function t2(age){

var age = 99;

alert(age);

}

t2();

分析过程:

0:形成ao = {}

1:

1.1分析形参ao{age:undefined}

1.2接收实参ao{age:undefined}

2: 分析变量声明,发现ao上已有age属性,不做任何变化。

执行过程:

ao.age = 99;

alert(age);//99

示列2

// 这题要仔细分析哦

function t3(greet){

var greet='hello';

alert(greet);

function greet(){}

alert(greet);

}

t3(null);

词法分析:

0:形成ao = {}

1:

1.1分析形参 ao = {greet:undefined}

1.2接收实参ao{greet:null}

2: 分析变量声明,发现ao上已有greet属性,不做任何变化。

3: 分析函数声明,被无情覆盖,所以ao = {greet:function greet(){}}

执行过程:

greet = ‘hello’;

alert(greet);

alert(greet);

结果当然是alert出来两个hello。

示例3

function a(b){

alert(b);

function b(){

alert(b);

}

b();

}

a(1);

词法分析:

0:形成ao = {}

1:

1.1 分析形参 ao = {b:undefined}

1.2 接收实参 ao = {b:1}

2: 分析变量声明,没有变量声明

3:分析函数声明,之前的ao.b属性全部被无情覆盖,ao = {b:function b(){}}

执行过程:

alert(b);

b(); //由作用域寻找到a函数中的b,即function,然后alert出来。

留个作业

思考:如果把上面的代码修改后,如下,结果又是如何?

function a(b){

alert(b);

b=function(){

alert(b);

}

b();

}

a(1);

【欢迎留言提交答案】