执行函数时,发生了什么

函数调用流程图

函数执行的时候发生了什么事情?主要有做了二件事情:

1 .函数执行逻辑前需要做的准备:

  • 1.创建一个上下文执行环境(excution context)

    • a. 创建一个激活对象(activation object)
    • b. 创建一个参数对象 (argument object)
    • c. 指定上下文执行环境的scope,该scope由函数的[[scope]]属性+激活对象组成
  • 2.变量对象(variable object)的初始化(变量对象可看作就是激活对象)

    • a. The function's formal parameters:为每一个函数形参创建Variable object的属性, 如果函数调用的参数与形参相匹配,那么将参数值分配给属性(否则分配undefinded)
          variable object {
              形参名:形参值,
              形参名:undefineded
          }
    • b. Inner function objects:为每一个function声明的函数对象创建variable object的属性,其名称与函数声明中使用的函数名称相对应 (这个时候就给函数指定了[[scope]]属性)
         variable object {
               函数名:function 函数名(){
            } 
         }
    • c. Local variables declared within the function:为每一个var声明的局部变量在variable object属性
         variable object {
              变量名:undefined(无论是对象,变量,还是函数,只有到真正执行的时候才赋值)
         }

2 .执行函数内部的逻辑代码

JSRUN notes