词法分析

具体步骤:

0:函数运行前的一瞬间,生成Active Object(活动对象),下称AO

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

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

2:分析变量声明声明!如var age,

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

     如果AO上已经有age属性,则不做任何影响

3:分析函数声明,如function age(){},则把函数赋给AO.age属性

注:如果此前age属性已经存在,则被无情的覆盖了。

一,

function t(age){
   alert(age)
}
t(5)//alert 5;
t()//undefined;

词法分析过程age为undefined;

t(5)——此法运行过程,赋值age为5;

二、

function t(age){
   var age=99;
   alert(age);
}
t(5);//alert 99

分析过程——1、形成AO={};2、分析形参age为undefined;3、分析var age,发现AO已有age属性,不做影响。

执行过程——AO.age=99;alert 99

三、

function t3(greet) {
   var greet = "hello";
   alert(greet);//hello
   function greet() {               
   }
   alert(greet);//hello
}
t3(null);

词法分析过程:

0:AO={};

1:分析参数AO={greet:undefined},分析接受形参AO={age:null}

2:分析greet变量声明,AO已经有greet属性,因此不做任何影响

3:分析greet函数声明,AO.greet=function(){},被覆盖成函数

执行过程:

greet="hello";

alert(greet);

alert(greet);

四、

function a(b) {
   alert(b);//function b(){}
   function b(){
      alert (b);//function b(){}
   }
   b();
}
a(1);

词法分析过程:

0:AO={}

1:分析参数AO={b:undefined};接受形参b=1;

2:分析var b声明,没有

3:分析函数声明function b(){},覆盖b=1;

执行过程:

alert(b);

b();


五、

function a(b) {
   alert(b);//1
   b=function b(){
      alert (b);//function b(){}
   }
   b();
}
a(1);

词法分析过程:

0:AO={}

1:分析参数AO={b:undefined};接受形参b=1;

2:分析var b声明,没有

3:分析函数声明,没有。。。注:b=function(){}是一个赋值过程,在执行期才有用。

执行过程:

alert(b);

b=function(){};

b();

六、

function b1(){

}//在词法分析阶段产生作用

b2=function (){

}//在函数运行阶段产生作用

七、

(function(window,undefined){})(window)

(function(window,undefined){})//内层表达式,返回值是函数,包在小括号里面,当成表达式来执行

(function(window,undefined){})()立即调用,这叫做匿名函数

优点是:立即执行,不污染全局变量

传window是为了速度,不传undefined是为了安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值