美文网首页
js 预编译

js 预编译

作者: 再见地平线_e930 | 来源:发表于2020-09-12 11:12 被阅读0次
    预编译发生在函数执行的前一刻

    预编译的四个过程

    1.创建 AO 对象(也称执行期上下文,是作用域链的一部分);

    2.找形参和变量声明,将形参个变量声明作为 AO 属性名,值为 undefined;

    3.将实参值和形参值统一;

    4.在函数体里面找函数声明,值赋予函数体

    例子1:

    function fn(a) {
                console.log(a); // function
    
                var a = 123; // a = 123
    
                console.log(a); // 123
    
                function a() {} // 已提升,就不用管了
    
                console.log(a); // 123
    
                //下面这句话不是函数声明,是函数表达式
                var b = function() {} // b = function() {}
    
                console.log(b); // function
    
                function d() {}
            }
    
            fn(1);
    
            //1.创建 AO 对象
            AO {
                
            }
    
            //2.找形参和变量声明,值为undefined
            AO {
                a: undefined,
                b: undefined,
            }
    
            //3.将实参值和形参同一
            AO {
                a: 1,
                b: undefined,
            }
    
            //4.在函数体里找函数声明,值赋予函数体
            AO {
                a: function a() {},
                b: undefined,
                d: function d() {}
            }
    
            //5.执行函数
    

    例子2:

    function test(a, b) {
                console.log(a); // 1
                c = 0;
                var c;
                a = 3;
                b = 2;
                console.log(b); // 2
                function b() {}
                function d() {}
                console.log(b); // 2
            }
    
    test(1);
    

    例子3:

    function test(a, b) {
                console.log(a); // function
                console.log(b); // undefined
                var b = 234;
                console.log(b); // 234
                a = 123;
                console.log(a); // 123
                function a() {}
                var a;
                b = 234;
                var b = function() {}
                console.log(a); // 123
                console.log(b); // function
            }
    
    test(1);
    

    相关文章

      网友评论

          本文标题:js 预编译

          本文链接:https://www.haomeiwen.com/subject/tmaiektx.html