js函数预编译
创建AO 第一步,寻找参数变量住。
提升变量未定义,参数赋值相统一。
声明函数最后找,赋值函数身体到。
已经提升不用看,变量赋值最果断。
创建AO 第一步,寻找参数变量住。
js函数预编译
第一步创建 AO对象
AO{
}
第二部寻找变量声明以及形参
提升变量未定义,参数赋值相统一。
将他们放入 AO对象中 并且值为undefined
然后将形参实参相统一
声明函数最后找,赋值函数身体到。
最后一步是 寻找函数声明 并赋值
已经提升不用看,变量赋值最果断。
然后在函数执行的时候 已经提升到 AO的部分就忽略不看
<script>
/*
第一步创建 AO 对象
*AO{
第二部 寻找变量声明
a:undefined,
b:undefined,
第三步 实参形参相统一
a:1,
b:3,
第四部提升函数
a:function a() {},
b:3,
}
*/
function prepar(a, b) {
console.log(b); // -------> 3
var a = 4; //运行到这儿 a = 4
var b = 5; //运行到这儿 b = 5
console.log(a); //-------------->4
function a() {
}
var b = function b() {
//注意这是函数表达式 不是声明所以
//不会提升函数 只会提升前边的变量声明
}
//运行到这儿 b = function b() {}
console.log(b);//-------------->function b() {}
}
prepar(1, 3);
</script>