题目如下:
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) { |