js预编译

js预编译

通篇扫描,基本的语法检测 例如:单词拼写错误,中文没有注释等等。没有问题开始进行全局预编译

全局预编译

特点:在全局作用域下声明的变量,会被提升到脚本块的顶部,并且会成为window对象的属性

  1. 会隐式生成一个(Gloabl Object) GO对象
  2. 分析var变量声明,如果变量在GO对象中不存在,直接将变量名作为AO对象的属性名,值为undefined,如果已经存在,不做任何改变
  3. 分析function函数,将函数名作为GO对象的属性名,值为函数体,如果已存在,直接覆盖
  4. 随后逐行执行,根据预编译产生出来的对象进行逐行执行

碰到函数被调用时进入函数进行函数预编译

函数预编译

  1. 函数在执行前的一瞬间,会隐式生成一个AO(active object 活动对象)对象
  2. 分析参数,形参作为AO对象的属性名,实参作为AO对象的属性值
  3. 分析var声明,变量名作为AO对象的属性名,值为undefined,如果遇到同名,不会对AO对象做任何改变
  4. 分析函数声明,函数名作为AO对象的属性名,值为函数体,如果遇到同名,直接以函数声明为主,直接覆盖
  5. 随后逐行执行,根据预编译产生出来的对象进行逐行执行

在进行预编译的时候 只需要去管函数 if判断中的声明(变量声明及函数声明都得正常分析)if条件决定是后面的执行过程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值