面试题--预编译

522 阅读1分钟

做类似的题,要严格按照以下四步走

世界上很多事都不能先上车后买票,一旦这样做了,就会后悔的,嗯,医院网挺快

预编译的四个阶段

1:创建ao对象

2:找形参和变量声明,作为ao对象的属性名,值是undefined

3:实参和形参相统一

4:找函数声明。会覆盖变量的声明


//源代码
function fn(a, c) {
    console.log(a); //1
    var a = 123;
    console.log(a); //1
    console.log(c); //1
    function a() {}
    if (false) {
        var d = 678
    }
    console.log(d); //1
    console.log(b); //1
    var b = function () {}
    console.log(b); //1
    function c() {}
    console.log(c); //100
}
fn(1, 2);

把源代码预解析

1ao:{
a:underfined  1    function a() {}
c:underfined  2    function c() {}
d:underfined
b:underfined
}

预解析后js的解释执行

function fn(a, c) {
    console.log(a); //function a() {}
    var a = 123;
    console.log(a); //123
    console.log(c); //1function c() {}
    function a() {}
    if (false) {
        var d = 678//条件false,所以忽略
    }
    console.log(d); //underfined
    console.log(b); //underfined
    var b = function () {}
    console.log(b); // function () {}
    function c() {}
    console.log(c); // function c() {}
}
fn(1, 2);