javascript预编译

实例分析

分析:

  1. 页面产生便创建了GO对象(Global Object)(也就是window对象)
  2. 第一个脚本文件加载
  3. 脚本加载完分析语法
  4. 开始编译,查找变量声明为作为GO属性,值赋undefined,查找函数声明作为GO属性,值赋函数体。

 预编译

解释执行代码(直到执行调用函数test(2)语句)

执行函数test()之前,发生预编译

  1. 创建AO活动对象(Active Objecet)
  2. 查找形参和函数声明为AO属性,值赋underfined
  3. 实参值赋给形参
  4. 查找函数声明为AO属性,值赋函数体

 预编译前两步:

 预编译第三步:

预编译第四步:

 

 执行test()函数时如下过程变化:

注意:

预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译,只在解释执行阶段才会进行变量初始化。

预编译(函数执行前) 

  1. 创建AO对象
  2. 查找函数形参以及函数内变量声明,形参名及变量名作为AO的属性,值赋undefined
  3. 实参形参相统一,实参赋值给形参
  4. 查找函数声明,函数名作为AO的属性,值赋函数引用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值