js预编译AO与GO

JS代码编译过程:
1.检查通篇的语法错误,若有错误则不编译执行.
2.预编译.
3.解释一行,执行一行.

js预编译时会创建GO对象与AO对象

GO: global object 即 全局上下文, GO=window对象,GO即操作window,a为全局变量,console.log(a) = console.log(window.a)

AO :   activation object 活跃对象,函数上下文,在函数执行之前进行的一个步骤


AO步骤:

1. 创建AO(Activation Object)对象,又叫执行期上下文;
2. 寻找形式参数和变量声明作为AO的属性名,并赋值为undefined;
3. 传入实际参数的值;
4. 在函数体内寻找函数声明,放入作为AO的属性,并赋值为其函数体。


GO步骤:

1. 创建GO(Global Object)对象;
2. 寻找变量声明作为GO的属性名,并赋值为undefined;
3. 寻找函数声明,放入作为GO的属性,并赋值为其函数体。

demo:

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(1);
 
根据预编译以及执行过程得到结果: 
function a () {}, undefined, 234,123,123,function () {}

posted @ 2020-01-19 14:35  詹姆斯小皇帝  阅读(510)  评论(1编辑  收藏  举报