预编译做了哪些事情?
1.创建ao对象(js的变量对象,供js引擎自己去访问)
2.找形参和变量的声明,作为ao对象的属性名,值为undefined
3.实参和形参相统一
4.找函数声明,会覆盖名字一样的变量声明
下面是一个例子:
function fn(a, c) {
console.log(a)// function a() { }
var a = 123
console.log(a)// 123
console.log(c)// function c() {}
function a() { }
if (false) { var d = 678 }
console.log(d)// undefined
console.log(b)// undefined
var b = function () { }//函数表达式而不是函数声明
console.log(b)// function (){ }
function c() { }
console.log(c)// function c(){}
}
fn(1, 2)
第一步:
//找形参和变量的声明,作为ao对象的属性名,值为undefined
AO:{
a:undefined,
c:undefined,
d:undefined,
b:undefined
}
第二步:
//实参和形参相统一
AO:{
a:1,
c:2,
d:undefined,
b:undefined
}
第三步:
//找函数声明,会覆盖名字一样的变量声明
AO:{
a:function a() { },
c:function c() { },
d:undefined,
b:undefined
}
第四步:js的解释执行(逐行执行)得出结果。