js预解析 GO和AO的创建赋值过程 javaScript基础

今天刷了一些题,复习一下预解析 

AO对象(activation object)

GO对象 GO{}(global object) 这个GO就是window

function test(a,b){

console.log(a)
var a=3

function a(){}


}

test(2,3)

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

预解析会通篇扫描 跳过执行语句,查询关键字处理声明语句,同样也是按从上到下按顺序进行的。变量和函数在内的所有声明都会在代码被执行前首先被处理,叫做“提升”。所以,即便一个函数的声明在下方,在前面仍然可以正常执行这个函数。

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

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

ao{

}

//第二步 将函数内所有的形参和变量声明储存到ao对象中,value为undefined。

ao{

    a:undefined,
    b:undefined,

}

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

ao{

    a:2,
    b:3,

}

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

ao{

    a:function(){},
    b:3

}

之后开始打印的a,其实打印的就是ao对象中的a,go对象同理,只是go指向的是window对象,其实window对象也就是go对象的意思了,只是少了形参和实参统一
 

猜你喜欢

转载自blog.csdn.net/zhanghuanhuan1/article/details/90404034