diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/.keep" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/.keep" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/.keep" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/2022-10-29-\351\242\204\347\274\226\350\257\221.md" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/2022-10-29-\351\242\204\347\274\226\350\257\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..9af531a04f8d4bacc7d83e74abf6bbfb6d45127f --- /dev/null +++ "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/2022-10-29-\351\242\204\347\274\226\350\257\221.md" @@ -0,0 +1,75 @@ +# 预编译AO&GO + +### AO 指活动性对象,也叫执行期上下文,就是我们通常所说的作用域。这里指函数的局部作用域。 + +AO步骤: + +创建AO(Activation Object)对象,又叫执行期上下文; +寻找形式参数和变量声明作为AO的属性名,并赋值为undefined; +传入实际参数的值; +在函数体内寻找函数声明,放入作为AO的属性,并赋值为其函数体。 + +调用时,先在函数内部进行js预解析 + + 1. 先创建AO对象 AO{} + + 2. 把形参和变量声明作为对象的属性 + + AO { + + a: undefined // 形参a和变量声明的a一样,只需写一个 + + b: undefined + + } + + 3. 把实参和形参值统一 + + AO { + + a: 2 + + b: 2 + + } + + 4. 在函数体中找函数声明,值赋为函数体 + + AO { + + a: 2 + + b: 2 + + arr: function () {}; + + } + +### GO 是全局对象,GO对象跟window对象是同一个对象。可以理解为window对象有两个名字 window == GO。 + +GO步骤: + +创建GO(Global Object)对象; +寻找变量声明作为GO的属性名,并赋值为undefined; +寻找函数声明,放入作为GO的属性,并赋值为其函数体。 +同样进行预解析 + + 1.创建GO对象 GO {} + + 2.把声明的变量给到GO的属性 赋值为undefined + + GO { + + b: undefined + + } + + 3. 找全局域中的函数声明,放到GO对象的属性,赋值为函数体 + + GO { + + b: undefined + + arr: function aaa() {} + + } 预解析完毕,执行代码 \ No newline at end of file