题目如下:
1  | function fn(a, c) {  | 
要想解决这道题需要知道,函数在预编译阶段都干了哪些事情,这就需要了解函数上下文中的变量对象的知识
预编译->作用域的创建阶段/预编译的阶段->js的变量对象(AO对象:供js引擎自己去访问的)
预编译阶段具体步骤如下:
- 创建变量对象(AO对象:活动对象)
 - 找形参和变量的声明,作为AO对象的属性名,值是undefined
 - 实参和形参相统一
 - 找函数声明,会覆盖掉变量的声明
 
1、创建变量对象
1  | AO = {  | 
2、找形参和变量的声明,作为AO对象的属性名,值是undefined
1  | AO = {  | 
3、实参和形参相统一
1  | AO = {  | 
4、找函数声明,会覆盖掉变量声明
1  | AO = {  | 
接下来就是函数的执行阶段了,函数逐行执行
1  | function fn(a, c) {  |