函数调用时 怎么运行代码的
预编译
1.分析代码是否正确
2.隐式操作==>预编译:函数调用了以后 在运行代码之前
形实函运
2.1函数每次调用都会生成一个AO对象:执行期上下文对象
2.2给AO对象添加成员:函数内部的局部变量和形参变量名 作为AO对象的属性名
AO:{a:undefined}
2.3把传入的实参赋值给AO对象的属性
AO:{a:100}
2.4局部函数声明,形参赋值 把局部函数的名字让AO对象也有一个一样的成员名,把函数体赋值给这个属性
AO:{a:100,fn:function fn(){}} 形参和局部变量一样的时候 不影响
function fm(a) {
var a=20
function fn(){}
}
var b=100
fm()
3.运行代码:预编译过的就不在运行
全局作用域的预编译
GO对象的成员全部浅拷贝给环境对象window