javaScript预编译步骤,AO和GO

JavaScript预编译包括AO(为函数执行上下文)和GO(为全局执行上下文)。

AO(Activation Object):活动对象,是函数执行上下文中的一个对象,用于存储函数中的变量,函数声明以及参数等,每当一个函数被调用时,都会创建一个新的活动对象。

GO(Global Object):全局对象,是全局执行上下文中的一个对象,用于存储全局范围内的变量核函数。全局对象在JavaScript代码执行前就被创建,并且在整个程序的声明周期内存在。

1、AO示例及过程

AO执行步骤:

1、寻找函数内的形参和变量声明(var变量声明会提升)

2、实参值赋值给形参

3、找函数声明,赋值函数体

4、执行(预编译剩下的再进行执行)

function test(a){
    console.log(a);//function a(){}
    var a = 1;
    console.log(a);//1
    function a(){};
    console.log(a);//1
    var b = function(){};
    console.log(b);//function(){}
    function d(){};
};
test(2)
/*
Ao:执行步骤
1、寻找函数内的形参和变量声明(变量声明会提升)
2、实参值赋值给形参
3、找函数声明,赋值函数体
4、执行(预编译剩下的再进行执行)

AO:执行过程{
    a:undefined->2->function a(){}->1
    b:undefined->function(){}
    d:function d(){}
}
*/

2、GO示例及过程

GO执行步骤:

1、找变量声明;

2、找函数声明;

3、执行。

console.log(a,b);//function a(){},undefined
function a(){};
var b = function(){} ;
/*
GO:执行步骤
1、找变量声明
2、找函数声明
3、执行

GO:执行过程{
    b:undefined->function(){}
    a:function a(){}
}

*/

3、AO、GO混合示例及过程

a =1;
function test(){
    console.log(a);//undefined,AO里面有a的值,就不去GO里面找了,所以取不到GO的值1
    a = 2;
    console.log(a);//2
    var a = 3;
    console.log(a);//3
}
test();
var a;
console.log(a);//1
/*
执行过程:
AO={
    a:undefined->2->3
}
GO={
    a:undefined->1
    test:function test(){...}
}
*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值