zoukankan      html  css  js  c++  java
  • js 预编译

    变量声明提升

    函数整体提升

    函数体预编译步骤:1、创建AO对象

                                     2、找形参和变量声明(不管变量声明是在if或for大括号号内只要是var xx),将变量和形参名作为AO属性名,值为undefined

                                     3、将实参值和形参对应赋值

                                     4、在函数体里面找函数声明,函数名为作为AO属性名,值为函数体

    函数体预编译在函数执行之前执行

            function fn(a){
                console.log(a);//function a(){}
                var a=123;
                console.log(a) //123
                function a(){}//此处是函数声明
                console.log(a) //123
                var b=function(){}//此处不是函数声明 不函数表达式
                console.log(b) //function(){}
                function d(){}
            }
            fn(11)  
            //1、创建AO对象 AO={ } 2、找形参和变量声明,将变量和形参名作为AO属性名,值为undefined AO={a:undefined ,b:undefined  } 
            //3、将实参值和形参对应赋值 AO={a:11 ,b:undefined  } 在函数体里面找函数声明,函数名为作为AO属性名,值为函数体 AO={a:function a(){} ,b:undefined  }
            //函数执行时 
              //       1、console.log(a); console.log(AO.a) 结果是function a(){}      
                    // 2、var a=123; AO={a:123 ,b:undefined  } console.log(a)console.log(AO.a) 结果是123 
                    // 3、function a(){}//此处是函数声明 已提升不用管 AO={a:123 ,b:undefined  } console.log(a)console.log(AO.a) 结果是123 
                    // 4、var b=function(){} //此处不是函数声明 不函数表达式AO={a:123 ,b:function(){} } console.log(b)console.log(AO.b) 结果是function(){} 
            function test(a,b){
                console.log(a)//12
                c=0
                var c
                a=3
                b=2
                console.log(b) //2
                function b(){}
                function d(){}
                console.log(b) //2
            }
            test(12)
            function test1(a,b){
                console.log(a) //function a(){}
                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(){}
            }
            test1(13)

     //全局的预编译 

    1、创建GO对象(window) GO={ } 2、找变量声明(不管变量声明是在if或for大括号号内只要是var xx),将变量名作为GO属性名,值为undefined
    3、找函数声明,函数名为作为GO属性名,值为函数体
        console.log(a) //function a(){}
            var a=123
            console.log(a) //123
            function a(){}
            console.log(a)  //123
            //1、创建GO对象 GO={ } 2、找变量声明,将变量名作为GO属性名,值为undefined GO={a:undefined }
            //3、找函数声明,函数名为作为GO属性名,值为函数体 GO={a:function a(){} }
            //函数执行时 
              //       1、console.log(a); console.log(GO.a) 结果是function a(){}      
                    // 2、var a=123; GO={a:123 } console.log(a)console.log(GO.a) 结果是123 
                    // 3、function a(){}//此处是函数声明 已提升不用管 GO={a:123 ,b:undefined  } console.log(a)console.log(GO.a) 结果是123 
                    
    function fn(){
                console.log(b)//undefined
                if(a){
                    var b=100
                }
                console.log(b)//undefined
                c=234
                console.log(c)//234
            }
            var a;
            fn()
            a=10
            console.log(c)//234
    //首先预编译 GO={ a: undefined} 然后执行到fn()时fn函数先预编译 AO={b:undefined} 再执行fn时
    
    
            function fn(){
                return foo;
                foo=10
                function foo(){}
                var foo=11
            }
            console.log(fn())//function foo(){}
            console.log(fn1())//11
            function fn1(){
                foo=10
                function foo(){}
                var foo=11
                return foo;
            }
  • 相关阅读:
    BZOJ 4769: 超级贞鱼 逆序对 + 归并排序
    BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划
    luogu 4059 [Code+#1]找爸爸 动态规划
    CF718C Sasha and Array 线段树 + 矩阵乘法
    计蒜客 2238 礼物 期望 + 线段树 + 归并
    BZOJ 2157: 旅游 (结构体存变量)
    BZOJ 3786: 星系探索 ETT
    BZOJ 3545: [ONTAK2010]Peaks 启发式合并 + 离线 + Splay
    Spring的几种初始化和销毁方法
    SpringCloud之Zuul高并发情况下接口限流(十二)
  • 原文地址:https://www.cnblogs.com/howhy/p/15770416.html
Copyright © 2011-2022 走看看