在学习作用域与作用域链的时候,看到“执行函数时会创建一个称为运行期上下文(execution context)的内部对象”,想了解下这个“运行期上下文”本质上到底是个啥?函数执行结束,“运行期上下文”就销毁了么?函数内变量在函数执行结束后的清理是否与“运行期上下文”有关?
在学习作用域与作用域链的时候,看到“执行函数时会创建一个称为运行期上下文(execution context)的内部对象”,想了解下这个“运行期上下文”本质上到底是个啥?函数执行结束,“运行期上下文”就销毁了么?函数内变量在函数执行结束后的清理是否与“运行期上下文”有关?
给你一个最通俗的答案 不是很准确但是便于理解
变量对象(Variable object)是说JS的执行上下文中都有个对象用来放这个执行上下文中可被访问但是不能被delete
函数标示符啊形参啊变量声明啊什么的这些玩意会挂在个对象上
对象的属性对应它们的名字对象属性的值对应它们的值但这个对象是规范上或者说是引擎实现上的不可在JS环境中访问到
活动对象(激活对象)(Activation object)有了变量对象存每个上下文儿中的东西但是它啥时候用呢其实就是每进入一个执行上下文儿这个执行上下文儿中的变量对象就被激活了可以用了也就是该上下文中的函数标示符啊形参啊变量声明啊就可以被访问到了
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
运行期上下文就是指当执行一条语句时,哪些对象(所谓的运行环境)能够被使用。比如对于一个函数内部来说,函数的参数、声明的对象、全局变量等。JS是通过作用域链来实现的,所以内层的函数能够访问外层函数的变量,一直到全局变量。函数结束时,运行期上下文我认为就销毁了,除了那些在函数执行结束后仍被引用的对象。内部变量清理,是因为有垃圾回收机制。
推荐阅读《Webkit技术内幕》