总结js的预编译过程

预编译发生在函数执行的前一刻。

预编译四个过程如下:

1、创建AO对象(Activation Object即执行期上下文);

2、找形参和变量声明,将形参和变量名作为AO属性,值为undefined;

3、将形参值与实参值统一;

4、在函数体内找函数声明,赋值与予函数体;

例子如下:

function fn(a) {
    console.log(a);
    var a = 123;
    console.log(a);
    function a() {
        
    }
    console.log(a);
    var b = function(){}
    console.log(b);
    function d() {}

}
fn(1);

 首先创建AO对象并找到形参与变量名作为AO属性(同一个变量名声明多次在AO对象里面只挂载一次):

OA:{
    a:undefined,
    b:undefined
}

其次将形参与实参的值统一,即AO对象的a属性值为1:

OA:{
    a:1,
    b:undefined
}

 最后在函数体内找函数声明,并赋值:

OA:{
    a:function a() {},
    b:undefined,
    d:function d() {}
}

 开始函数执行:

function fn(a) {
    console.log(a); //function a() {}
    var a = 123;
    console.log(a); //123
    function a() {
        
    } //函数声明在执行过程中忽略
    console.log(a); //123
    var b = function(){}
    console.log(b); //function b(){}
    function d() {}

}
fn(1);

如果有上面所述有不正确的地方,请帮忙指出。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值