实例分析

javascript预编译

分析:

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

 预编译

javascript预编译

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

javascript预编译

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

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

 预编译前两步:

javascript预编译

 预编译第三步:

javascript预编译

预编译第四步:

javascript预编译 

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

javascript预编译

注意:

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

预编译(函数执行前) 

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

相关文章: