js预解析 GO 和 AO 的创建赋值过程

本文详细介绍了JavaScript中预解析的过程,分别阐述了AO(激活对象,函数上下文)和GO(全局对象,全局上下文)的创建与赋值步骤。在AO部分,讲解了形参、变量声明和函数声明的处理;在GO部分,强调了全局变量和函数声明的提升。并提供了若干练习题以加深理解。
摘要由CSDN通过智能技术生成

js是一种解释性脚本语言,执行过程会先扫描一下整体语法语句,如果存在逻辑错误或者语法错误,那么直接报错,程序停止执行,没有错误的话,开始从上到下解释一行执行一行。预解析会通篇扫描跳过执行语句,查询关键字处理声明语句,同样也是按从上到下按顺序进行的。

AO activation object (活跃对象,函数上下文)

// 计算机执行到test()函数时,在执行的前一刻会创建一个ao对象
function test(a){
   
        
        console.log(a);

        var a=1;

        console.log(a);

        function a(){
   }

        console.log(a);

        var b=function(){
   }

        console.log(b);

        function d(){
   }

}

test(2);

以上述程序为例子,解释一下AO执行的过程:

  • 寻找函数的形参和变量声明,value为undefined
    AO={
    a:undefined
    b:undefined
    }
  • 将实参的参数值赋值给形参
    AO={
    a:undefined=>2
    b:undefined
    }
  • 寻找函数体的函数声明,赋值函数体(需要注意函数声明函数表达式的区别)
    AO={
    a:undefined => 2=> function a(){}
    b:undefined
    d:function d(){}
    }
  • 执行
    AO={
    a:undefined => 2 => function a(){} => 1
    b:undefined => function(){}
    d: function d(){}
    }

这是在控制台输出的结果:
AO

GO global object (全局上下文)

var a = 1;

function a(){
   

       console.log(2);

}

console.log(a);

以上述程序为例子,解释一下GO执行的过程:
GO与AO的不同之处在于GO少了形参与实参的统一

  • 寻找变量声明
    GO = {
    a:undefined
    }
  • 寻找函数声明
    GO = {
    a:undefined=> function a(){}
    }
  • 执行
    GO = {
    a:undefined=> function a(){}=> 1
    }

这是在控制台输出的结果:
GO
这里面最重要的便是变量声明和函数声明是会提升
这里整理了一些关于AO与GO的练习题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值