js预编译AO对象及GO对象

匿名 (未验证) 提交于 2019-12-03 00:22:01

简单谈一下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-b

首先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对象的意思了,只是少了形参和实参统一的步骤罢了。


转载请标明出处:js预编译AO对象及GO对象
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!