执行上下文随笔(转载前端面试之道)

  执行js代码时,会产生三种执行行上下文

 全局执行上下文,函数执行上下文,eval执行上下文

 其中有三个重要的属性    \

  变量对象 VO 包括  函数,变量,该属性只能在全局上下文访问

 作用域链  变量的作用域是在定义时就决定的

 this 

eg:

 var a =10;

function(i){

      var b= 20;

执行栈有两个

  全局上下文和函数上下文 

  globalContext ,fooContext

对于全局上下文来说   

  VO :    globalContext.VO===globe

                globalContext.VO={

                           a:undefined     //因为执行上下文时初始化环境时变量会创建变量名并赋值undefined

                         foo:<Function>   //     执行上下文时初始化环境时函数会在内存中传入整个函数进去

              }

对于函数上下文来说

   VO不能访问,只能访问活动对象(AO)

   fooContext.VO===foo.AO

  fooContext.AO={

         i:undefined   

         i:undefined    

        argumenrs:<>

  }

对于作用域链

     即包含自身变量对象和上级变量对象的列表,通过[[scope]]属性查找上级变量

    fooContext.[[scope]]=[globalContext.VO]  //foo执行上下文时,通过作用域链 往上 找到的上级变量对象

   fooContext.scope =  fooContext.[[scope]]+fooContext.VO 

  fooContext.scope=[

       fooContext.VO 

     globalContext.VO

 ]

   

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值