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