函数堆
- 把函数体中的代码当做字符串存储到堆中"代码字符串" => 创建函数不执行,函数没啥用
- 堆中有函数的形参,代码字符串
- 函数也是对象,他也有自己的键值对(name: "fn", lenth: 1, property: {}, __proto__: {})
- 创建函数的时候,就定义了函数的作用域=>当前函数所在的上下文
- 函数执行:形成一个全新的私有上下文,供代码执行(进栈执行)
- 函数进栈执行,如果当栈中有一个没有被释放的上下文则将这个压到栈底
- 代码执行之前先创建一个私有变量对象AO(FN),在初始化作用域链(scopeChain),<EC(FN),..., EC(G)>,首先是自己所在的上下文函数作用域,链向当前方法函数所在的作用域
- 初始化this指向
- 初始化实参集合Arguments
- 形参赋值
- 代码执行过程中, 遇到一个变量,先看是否为自己的私有变量(在自己的变量对象中有没有),是私有则操作都是自己的;不是私有,按照作用域链找上级上下文中是否存在,...,一直到全局上下文为止
- 上下文中的代码执行完,就会被出栈(释放)