编译

函数预编译

    1. 创建 AO 对象
    2. 找变量声明 形参,将变量名 形参名 当作 AO 对象的属性名,值为undefined
    3. 将实参和形参统一
    4. 在函数体内找函数声明,赋值予函数体


function fn(a,c){
    console.log(a);  // ƒ a(){}
    var a = 111;  
    console.log(a);  // 111
    console.log(c);  // ƒ c(){}
    function a(){};
    if(false){
        var d = 222;
    };
    console.log(d); // undefined
    console.log(b);  // undefined
    var b = function(){};
    console.log(b);  // ƒ (){}
    function c(){};
    console.log(c)  // ƒ c(){}
};

fn(20,30)

  

全局预编译

  1. 创建 GO 对象
  2. 找变量声明,将变量名当作 GO 对象的属性名,值为undefined
  3. 找函数声明 赋值予函数体
console.log(test); // f test(){}
console.log(b); // undefined
function test(a){
    console.log(c); // undefined
    var a = b = 365;
    c = 9;
    if(false){
        var c = 1000
    };
    console.log(a)  // 365
    console.log(c) // 9
};
test(100);
console.log(b); // 365 ? 注意连续赋值时
console.log(test) // f test(){}
var test = 500;
var b = 800;

 




 

posted @ 2022-09-29 10:07  小小黑加白  阅读(69)  评论(0编辑  收藏  举报