js中的预编译

预编译

js执行顺序: 词法/语法分析 预编译 解释执行

  1. js中存在预编译
        function demo() {
            console.log('I am demo');
        }
        demo(); //I am demo
        test(); // I am test 
        //分析: 由于test函数可以执行,所以javascript一定存在预编译机制
        function test() {
            console.log(" I am test")
        }
        var a;
        console.log(a) //undefined
        a = '123'
  1. 预编译发生在函数执行前一刻
  2. 预编译执行的步骤:
  • 1创建执行期上下文,activation object ,即AO
  • 2找形参和变量声明,将形参和变量声明做为AO的属性名,尚未赋值,值为undefined
  • 3将形参和实参相统一, 即把实参的值传到形参里面去
  • 4在函数体里面找函数声明,赋值函数体
  1. 实例
   function demo(a, b){
       console.log(a)
       c =0;
       var c;
       a = 1;
       b = 3;
       console.log(d)
       function d(){
           console.log(d)
       }
       function e(){
           console.log(e)
       }
   }
   demo(1)
   // 1.创建AO对象{}
   // 2.找形参和变量声明
   AO = {
       a:undefined,
       b: undefined,
       c: undefined,
  }
  //3. 形参实参想统一
  AO = {
       a:1,
       b: undefined,
       c: undefined,

  }
  // 4.在函数体里面找函数声明,值赋函数体
  AO = {
       a:1,
       b: undefined,
       c: undefined,
       d:function d(){
        console.log(d)
       },
       e: function e(){
        console.log(e)
       }
  }
  // 5.解释执行
posted @ 2019-08-18 16:01  ghostdot  阅读(1252)  评论(0编辑  收藏  举报