js 函数预编译思路整理
function test(a) {
console.log(a);
var a = 123;
function a() {};
var b = function() {};
console.log(a);
console.log(b);
function d() {};
console.log(d);
}
test(1);
如上代码 执行
错误实例 打印依次为
undefined 123 123 undefined undefined
进入正题
预编译: js代码的执行是读一行代码执行一行,但在执行之前系统会先对js进行全面扫描检查是否存在低级的语法错误,并不会立即执行语句。
预编译 : 预编译发生在js函数执行的前一刻 他会进行如下处理
1、 首先创立一个AO对象 用于存放数据;
2、找到所有形参和所有变量名 并赋值为undefiend
3、将实参值赋值给形参
4、找函数声明 并将函数体赋值给变量名
完成此四步 预编译结束 函数开始执行
上面的函数
AO {
a undefined ==== 1 参数 === 函数体 ====123
b undefiend =====函数体
d undefiend =====函数体
}
之后 函数执行 开始执行函数语句 完成 赋值
即 正确输出为
function a() {}
123
function() {}
function d() {}