• js预编译


    1、js运行三部曲

      语法分析、预编译、解释执行

    2、预编译

      预编译发生在函数执行的前一刻

      第一步:创建GO或AO对象(执行期上下文)

      第二步:将形参和var声明的变量作为AO的属性名,值为undefined

      第三步:将实参和形参统一

      第四步:在函数体里面找函数声明,将声明的函数名作为AO的属性名,值为函数体、

      实例1:

        function  fn(a){

          console.log(a)

          var  a  =  123;

          console.log(a)

          function  a  (){}

          console.log(a)

          var  b  =  function  ()  {}

          console.log(b)

        }

        fn(1)

        预编译过程

          第一步:创建AO对象  AO { }

          第二步:找形参和var声明的变量作为AO对象的属性,值为undefined

            AO {

              a: undefined,

              b: undefined

            }

          第三步:将实参和形参统一

            AO {

              a: 1,

              b: undefined

            }

          第四步:找函数声明,将声明的函数名作为AO对象的属性名,值为声明的函数体

            AO {

              a: function a(){},

              b: undefined

            }

          执行函数fn     

          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 (){ } 

        }

      

      实例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)

        预编译:

        AO {

          a: 1,

          b: function  b(){ },

          c: undefined,

          d: function  d(){ }

        }

  • 相关阅读:
    Linux下redis的安装
    elasticsearch使用时问题
    Elasticsearch 2.x plugin 问题汇总
    elasticsearch-jdbc 插件说明
    ElasticSearch 2.x 问题汇总
    深入JVM《一》
    linux fastdfs 搭建配置(单机)
    mybatis自动generator
    spring-boot mybatis 配置 主从分离 事务
    Maven Nexus
  • 原文地址:https://www.cnblogs.com/cuishuangshuang/p/13228168.html
Copyright © 2020-2023  润新知