js词法分析
/词法分析
1先分析参数
2在分析变量声明
3分析函数声明
一个函数能使用的局部变量就从上面的3步分析而来
具体步骤:
0:函数运行前的1瞬间,生成Active Object(活动对象),下称AO
1:把声明的参数形成Ao的属性,参数的值即属性的值;;接收参数,形成AO相应属性的值
2:分析变量声明,如var age;
如果Ao上还没有age属性,则添加age属性,值是undefined;
如果AO上已经有age属性,则不做任何处理
3 分析函数声明,如function foo(){};
则把函数赋给AO.foo()属性
注:如果此前foo属性已经存在,则被无情覆盖
/
function t(age){
alert(age);
}
t(5);//5
t();//undefined
/词法分析过程:
AO(age:undefined)
运行过程:
t(5) AO.age=5;alert(AO.age);//5
t() AO.age没有得到赋值,还是undefined/
function t2(){
var age=99;
alert(age);
}
t2(5);
/分析过程:
0:形成AO={};
1: 分析形参 AO={age:undefined;}
2:分析var age,发现AO已有age属性,不做任何影响
执行过程:
AO.age=99;
alert(AO.age);//99
/
function a(b){
alert(b);
function b(){
alert(b);
}
b();
}
a(1);
/分析过程
0:AO={};
1:分析参数AO={b:undefined;}
接收参数AO={b:1}
2:分析var声明,此函数没有var
3:分析函数声明,AO={b:function(){alert(b);}}
执行期
alert(b);//function
b();//由作用域寻找到a函数中的b,即function ,alert出来
/
function a(b){
alert(b);
b=function(){
alert(b);
}
b();
}
a(1);