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;
            }
  • 相关阅读:
    吴裕雄--天生自然 R语言开发学习:高级编程
    吴裕雄--天生自然 R语言开发学习:使用ggplot2进行高级绘图(续二)
    吴裕雄--天生自然 R语言开发学习:使用ggplot2进行高级绘图(续一)
    吴裕雄--天生自然 R语言开发学习:使用ggplot2进行高级绘图
    吴裕雄--天生自然 R语言开发学习:处理缺失数据的高级方法(续一)
    吴裕雄--天生自然 R语言开发学习:处理缺失数据的高级方法
    吴裕雄--天生自然 R语言开发学习:分类(续二)
    2018年阿里云NoSQL数据库大事盘点
    就差这2块钱的安全投入,让这家企业损失了1977万!
    如何打造7*24h持续交付通道?阿里高级技术专家的5点思考
  • 原文地址:https://www.cnblogs.com/howhy/p/15770416.html
Copyright © 2011-2022 走看看