今天刷了一些题,复习一下预解析
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对象的意思了,只是少了形参和实参统一