js预编译处理

73 阅读1分钟

作用域的创建阶段,预编译的阶段

预编译的时候做了机些事情?

  1. jS的变量对象 A0对像 供js引擎自己去访问的。 创建了ao对象;
  2. 找形参和变量的声明作为ao对象的属性名值是undefined;
  3. 实参和形参相统一;
  4. 找函数声明会覆盖变量的声明;

js的解释执行, 逐行执行

    function fn(a, c) {
        console.log(a); // function a(){}
        var a = 123;
        console.log(a); // 123
        console.log(c); // function c(){}

        function a(){}
        if (false){
            var d = 123;
        }

        console.log(d); // undefined
        console.log(b); // undefined

        var b = function(){}
        console.log(b); // function(){}
        function c(){}
        console.log(c); // function c(){}
    }

    fn(1,2)
    
     /** 
         * 预编译过程:
         * 1          2       3     4 
         * AO: {
         *      a: undefined  1    function a(){}
         *      c: undefined  2    function c(){}
         *      d: undefined
         *      b: undefined
         * }
         * */
    
    // js解释执行,逐行执行