javascript词法分析,分析3样东西:
1、先分析参数
2、在分析变量声明
3、分析函数声明
一个函数能使用的局部变量,就从上面的3步分析而来。
具体步骤:
1、函数运行前的一瞬间,生成 Active Object(活动对象),下称AO;
2、函数声明的参数,形成AO的属性,参数的值即属性的值,值全是undefined;
3、接受实参,AO的属性等于接受实参的值。
4、分析变量声明!如 var age,如果AO上没有age属性,则添加AO属性,值是undefined;如果AO上已经有age属性,则不做任何影响。
5、分析函数声明。如function foo(){},则把函数赋给AO.foo属性。如果此前foo属性已存在,则被覆盖。
例子1:
fucntion t(age){
alert(age);
}
t(5);//5
t();//undefined
词法分析过程:
t(5)-->AO.age=5;alert(AO.age);
t()-->AO.age没有得到赋值,还是undefined
例子2:
function t2(age){
var age=99;
alert(age);
}
t(5);
词法分析过程:
1、生成AO={}
2、分析形参:AO={age:undefined}
3、分析var age,发现AO已有age属性,不做任何影响
执行过程:
AO.age=99;
alert(AO.age);
例子3:
function t3(){
var greet='hello';
alert(greet);
function greet(){
}
alert(greet);
}
t3(null);//hello hello
词法分析过程:
1、AO={}
2、分析greet形参AO={greet=undefined}
3、分析greet变量声明,AO已经有greet属性,不做任何修改
4、分析greet函数声明,AO.greet=function(){},AO.greet属性被覆盖成函数
执行过程:
greet='hello';
alert(greet);//hello
alert(greet);/hello