JavaScript 代码是自上而下执行,但是在 JavaScript 代码执行前,会先进行 词法分析。所以 JavaScript 自上而下的执行过程分为 词法分析 和 执行 两个阶段。
词法分析主要有三个步骤:
- 分析参数
- 分析变量的声明
- 分析函数声明
具体步骤如下:
- 函数在运行的瞬间,生成一个活动对象(Active Object),简称 AO
- 第一步:分析形参:
- 函数接收形式参数,添加到 AO 的属性,并且这个时候值为 undefined,即
AO.age = undefined
- 接收实参,添加到 AO 的属性,覆盖之前的 undefined
- 函数接收形式参数,添加到 AO 的属性,并且这个时候值为 undefined,即
- 第二步:分析变量声明:如
var age
或var age = 18
- 如果上一步分析参数中 AO 还没有 age 属性,则添加 AO 属性为 undefined,即
AO.age = undefined
- 如果 AO 上面已经有 age 属性了,则不作任何修改
- 如果上一步分析参数中 AO 还没有 age 属性,则添加 AO 属性为 undefined,即
- 第三步:分析函数的声明:
- 如果有
function age(){}
把函数赋给 AO.age ,覆盖上一步分析的值,即AO.age = function age(){}
- 如果有