知识点
预编译4步:
1 创建AO对象
2 找形参和变量声明
3 实参和形参统一
4 找函数声明,并覆盖变量声名
面试题
function fn(a,c){
console.log(a)
var a = 123
console.log(a)
console.log(c)
function a(){
if(false){
var d = 678;
}
}
// console.log(d)
console.log(b)
var b = function(){}
console.log(b)
function c(){}
console.log(c)
}
fn(1,2)
/**
* 过程讲解
*
*
* 预编译阶段
* 1 2 3
* AO:{
* a: undefiend 1 function a()
* c: undefiend 2 function c()
* b: undefiend
* d: undefiend
* }
*
* 执行过程
* 1 输出 a = function
* 2 a = 123
* 3 输出 a = 123
* 4 输出 c = function
* 5 d = undefiend
* 6 b = undefiend
* 7 b = funciton
* 8 输出 b = function
* 8 输出 c = funciton
*/
推论及注意事项
1 预编译四步
1) 创建AO对象
2)找到形参和变量声明;变量即var出来的 ,并赋值为undefiend
3)把实参数据绑定到形参上
4)找到函数声明,如果与变量同名,则覆盖;这里要注意,函数声明不是函数表达式,函数表达式其实是变量声明