两个阶段:
1、词法分析
比如函数为
function xiaoming(age){
console.log(age); //function age(){},注意:并不是实参 6 !!!
console.log(sex); //undefined
console.log(b); //function b(){}
var age=5; //该语句分别在两个阶段中完成,var age在词法分析阶段,age=5在执行阶段起作用
var sex='women';
console.log(age); //5
console.log(sex); //women
console.log(b); //function b(){}
function age(){
}
function b(){
}
console.log(age); //5
console.log(sex); //women
console.log(b); //function b(){}
}
xiaoming(6); //实参在词法分析阶段被接收
(1)函数执行前形成临时活动对象 AO {}(Active object)
(2)函数参数分析
2.1 有参数时把参数作为AO的一个属性,值为undefined,AO对象变为AO {age:undefined}
2.2 接收实参,AO对象变为AO {age:6}
(3)函数内变量声明分析,有var 声明比如 var age ,var sex,由于AO已经有age属性,所以var age没有实际效果,AO没有sex属性,所以var sex有效果,AO对象变为AO {age:6,sex:undefined}
(4)函数内函数声明分析,如function age(){},function b(){},函数优先级比较高,会覆盖AO中同名变量属性值,此时AO对象变为AO{age:function(){},sex:undefined,b:function(){}}
2、顺序执行