js的预编译:AO与GO

函数在执行之前会进行预编译

1、创建AO对象
2、找到形参和变量声明,将变量和形参名作为AO属性名,值为underfined
3、将实参值和形参值统一
4、在函数体里面找到函数声明,值作为跟AO属性对应的值。

简单谈一下js的预编译过程。

function test(a,b){

    console.log(a)

    var a=123;

     function a(){}

    console.log(b)

    var b=234;

    console.log(b)

    function b(){}

    console.log(a)

    var b=function(){}

    console.log(b)

}

test(1)

我先说一下打印结果,结合实例给大家讲一下我对预编译的理解。

fn-a  fn-b 234 123 fn-() {}

首先js的执行过程会先扫描一下整体语法语句,如果存在逻辑错误或者语法错误,那么直接报错,程序停止执行,没有错误的话,开始从上到下解释一行执行一行。

但是js中首先你要清楚变量声明和函数声明是会提升的。

计算机执行到test()函数时,在执行的前一刻会创建一个ao对象。

ao{

}

这是第一步,创建一个ao对象,第二步是将函数内所有的形参和变量声明储存到ao对象中,value为undefined;

ao{

    a:undefined,

    b:undefined

}

第三步将形参和实参进行统一。

ao{

    a:1,

    b:undefined

}

第四步将所有的函数声明的函数名作为ao对象中的key,函数整体内容作为value,存储到ao对象中

ao{

    a:function(){},

    b:function(){}

}

之后开始打印的a,其实打印的就是ao对象中的a,然后a赋值123,在打印肯定就是123了,里面细节有很多,但是整体步骤就是这些,适合有点基础的前端看,用于给大家巩固一下ao对象的执行过程,go对象同理,只是go指向的是window对象,其实window对象也就是go对象的意思了,只是少了形参和实参统一的步骤罢了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值