- 函数的执行上下文
- 全局执行上下文
- 函数级的执行上下文
- eval执行上下文
- 函数执行的阶段可以分文两个:函数建立阶段,函数执行阶段
- 函数建立阶段:当调用函数,还没有执行函数内部的代码
- let const 会在 script对象中 var在global对象中
- 会创建执行上下文对象,函数内部需要的数据准备好 ```javascript ExecutionContext = { variableObject:{a,b,sub,s:undefined,arguments} //变量对象,进行变量提升,此时不可使用,函数中的arguments,参数,局部成员 scopeChains://作用域链。当前函数所在的父级作用域中的活动对象 this:{} //当前函数的this指向 } function fn(a,b){ function sun(){ var s = 56 } }
- 函数建立阶段:当调用函数,还没有执行函数内部的代码
- 函数执行阶段
```javascript
//变量对象转为活动对象
ExecutionContext = {
activationObject://vo这个对象指向ao,函数中的arcguments,参数,局部变量
scopeChains://当前所在的父级作用域中的活动成员
this:{}
}
[[Scopes]]作用域链,函数在创建时候会生产该属性,js引擎才可以访问,存储的是所有父级中的变量对象
- 闭包
- 外部对一个函数内部有引用 不一定是function 可以是一个对象 如果是值类型,不会形成闭包
- 在另一个作用域能访问到 所返回对象 的外部作用域中的的局部成员
- 取消掉 在外部将使用的闭包 赋值为 Null