文章目录
js预编译
js执行前会进行预编译。
会产生一个 GO ,也就是我们说的全局作用域 , 当一个方法被调用时会形成一个局部作用域 AO。
全局代码在执行的时候,先是 变量提升 , 在全局作用域内添加 属性,然后是 函数(以函数声明创建的函数)提升,再是代码执行。
1.全局预编译GO(Global Object)
- 创建GO对象,即window
- 给全局变量赋值 undefined
- 将全局的函数申明的函数名作为key,value为函数整体赋值到GO对象中
2.函数预编译AO (Activation Object)
- 创建AO对象
- 将函数内的形参和变量声明存储到AO对象中,值为undefined
- 将实参和形参统一
- 将函数内的函数申明的名称作为AO对象的key,函数的整体内容为value 存储到AO对象
来个例子:
function f(a){
console.log(a);
var a=123;
console.log(a);
function a(){}
var b=function(){}
function d(){}
}
f(1)
//ƒ a(){}
//123
代码分析:
- 创建AO对象
AO={}
- 找形参和