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;
            }
  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/howhy/p/15770416.html
Copyright © 2011-2022 走看看