javascript 中激活对象 AO(ACTIVE OBJEECT)详解

      这篇文章主要说明一下javascript 底层对变量和函数是怎样存在和运算的。

     众所周知 javascript 中一切都是对象,此处要说的就是OA。

    

     首先说明作用域的问题

    <script type="text/javascript">
        var str1 = 'global';
        
        function testOne(){
            alert(str1);
            alert(str2);
            var str2='local';
        }


        testOne();//global,underfined
</script>

     分析如下

    testOne 在调用时没有输出 global 和 local 因此js内部存在一个过程分析。

    当函数运行的一瞬家主要分析3各方面。

    1.参数;

    2. 局部变量声明;

    3.函数声明;

    此时引入激活对象。

          

    在函数运行的一瞬间,先形成一个激活对象叫ACTIVE OBJEECT
简称OB.
    ao的对象是用来储存一个函数的相关参数,局部变量等。
    函数内部无论是引用参数,还是引用局部变量,都到ao上找


案例:

        function t(){

     function x(){

alert(x);

}

  x();

        }   

t();//function x(){

      alert(x);

}   此时输出函数


      function sop(x,y){

    var x=56;

alert(x);

alert(y);

      }

 sop(2,3)//56,3

    运行分析:

  1 , 函数调用瞬间,形成激活对象并产生oa.x和oa.y此时不进行赋值。
如果传来实参则把实参赋给相应的属性。
   2, 分析var 局部变量声明,以var x=56为例 会先到ao激活对象去寻找x属性
如果x属性不存在则创建ao的属性,但x=56,这个赋值不会发生。
   如果x属性存在,不做任何影响,因为ao的x属性已经存在。 
   3 ,分析函数声明function 函数名(){}假设函数名为x,函数声明会把函数赋值为
ao的x属性,如果x属性存在则进行覆盖。
         

      function t3(x,y){

var x=7;

console.log(x);//7

console.log(y);//undefined

     }

    t3(5);

    1.分析参数

     AO[x,y]

     2. 分析变量声明;

     AO.x 已存在,不做影响

    3 .赋值结果AO[x,y]

   

    执行过程

    ao.x = 7

    console.log(AO.X)==>7

   console.log(AO.y)==undefind


    例二::

     var str1 = 'glo';

    function t4(){

console.log(str1);

console.log(str2);

var str2 = 'local';

}


   t4();

  赋值分析

1  AO[];

[ao[str2]],值为underfind


执行

console.log(str1); //ao 上找不到,到全局找;

console.log(str2);//ao上找到,值是underfined

<script type="text/javascript">
 function sop(x,y){
    alert(x);
     var x=56;
    alert(x);
    alert(y);
 }
sop(2,3);
此处解析
   1.调用函数瞬间 参数分析 产生激活对象ao 并且ao.x=2   ao.y=3
   2.分析局部变量声明 var x此时回到oa上寻找x属性因x存在不做修改。
   3.分析函数声明,此处无(函数声明会覆盖同属性)
   4 执行阶段,alert(x)//2

</script>

以上例自可看出函数声明表达式和函数变量表达式的区别。

1.function t(){},为声明表达式,立即影响ao,优先级很高,首先占据oa对象。
2.var x=function (){}这种是等号右边 是一个表达式,返回值把值赋给x。


        


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值