执行上下文(Execution Context )和范围(Scope) Variable object(变量对象) GO(全局对象) AO(激活对象)总结

执行上下文(Execution Context )和范围(Scope)

变量或函数的执行上下文定义了它可以访问的其他数据,以及它的行为方式。每个执行上下文都有一个关联的变量对象,所有定义的变量和函数都存在于该变量对象上。

每个函数调用都有自己的执行上下文。每当代码执行流入函数时,函数的上下文就会被推送到上下文堆栈中。函数完成执行后,堆栈被弹出,将控制权返回到先前执行的上下文。

在上下文中执行代码时,会创建变量对象的范围链。作用域链的目的是提供对执行上下文可以访问的所有变量和函数的有序访问。

**Execution context(执行上下文)**是一个对象,它包括:

  • variable object,(变量对象),即激活对象,是函数的情况
  • scope chain(作用域链),您可以将其视为外部作用域的链表
  • 这个值

**Variable object(变量对象)**是一个抽象的东西,它可以是其中之一:

  • global object(全局对象)在全局上下文中;
 1. 创建GO(Global Object)对象;
 2. 寻找变量声明作为GO的属性名,并赋值为undefined;
 3. 寻找函数声明,放入作为GO的属性,并赋值为其函数体。
  • activation object (激活对象)用于函数;

Activation object(激活对象)是一个持有的对象:

  • 函数的正式参数
  • 此函数的参数对象。
  • 此函数内的任何变量和(命名)函数
1. 创建AO(Activation Object)对象,又叫执行期上下文;
2. 寻找形式参数和变量声明作为AO的属性名,并赋值为undefined;
3. 传入实际参数的值;
4. 在函数体内寻找函数声明,放入作为AO的属性,并赋值为其函数体
console.log("result1",test)
function test(test){
	console.log("result2",test)
	var test = 234;
	console.log("result3",test)
	function test(){}
}
test(1)
var test = 123;
console.log("result4",test)

## GO对象

 **找形参和变量声明**
 GO{
     test:undefined
 }

 **在函数体里面找到函数声明值赋予函数体**
 GO{
     test:function test(test){...}
 }

 result1: function test(test){...}  
 **执行函数**

## 创建AO对象

 **找形参和变量声明**
 AO{
     test:undefined
 }

 **将实参和形参统一**
 AO{
     test:1
 }
  

 **在函数体里面找到函数声明值赋予函数体**
AO{
     test:function test(){}
 }

 **GO也有test AO优先 AO没有找GO**
 result2:function test(){}

// var test = 234;

// result3:234

 result4:123

 **结果**
 result1:function test(test){...}  
 result2:function test(){}
 result3:234
 result4:123

所以,激活对象只是可变对象的一种特例;

它基本上是一个容器,用于存放您可以在函数内按名称访问的所有本地内容,除了this。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值