首页 > Web开发 > 详细

js预编译

时间:2020-07-03 09:02:06      阅读:68      评论:0      收藏:0      [点我收藏+]

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

    }

 

js预编译

原文:https://www.cnblogs.com/cuishuangshuang/p/13228168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!