JavaScript 预编译知识梳理

前言

JavaScript有两个特点,第一个是单线程,另外一个解释性语言,什么事解释性语言? 就是翻译一句执行一句。但是在代码解释执行之前,还有两个环节,一是语法分析,二是预编译。什么事语义分析?就是通篇扫描一遍代码,看有没有低级的语法错误。通篇扫描后进行预编译,最后才是代码解释执行。

知识要点

  • 预编译前奏
    1.AO(activation object) 活跃对象(函数执行期上下文),GO( Global Object ) 全局对象(全局执行期上下文)

    2.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就位全局对象GO所有。

    var a = b = 123;(b 属于GO,a属于AO)

    3.一切声明的全局变量,全是window(GO)的属性。

  • 函数的预编译

    1.创建AO对象。
    2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined。
    3.将实参值和形参统一。
    4.在函数体里面找函数声明,值赋予函数体。

  • 全局预编译
    1.创建GO对象。
    2.找变量声明,将变量名作为AO属性名,值为undefined;
    3.在函数体里面找函数声明,值赋予函数体。

<script>
//全局预编译创建GO
//GO{
//    test:function test()
//    a:undefined    -->10
//    c:hugo
// }



function test(){
      console.log(b);    //undefined
      if(a) {   //undefined(AO里边没有在GO找)
           var b = 100;
      }
      c = 'hugo';  //变量未经声明就赋值,此变量就位全局对象GO所有。
      console.log(c);   //hugo(AO里边没有在GO找)
}
var a;
test();
//函数预编译创建AO
//A0{
//    b: undefined
//
//
//}


a = 10;
console.log(c);//hugo

</script>

最后补充一点,变量值在AO里边没有找到,再去GO里边找。

最后打印结果:
undefined
undefined
hugo
hugo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值