概念
当控制器转到可执行的代码是,会进入该代码对应的执行上下文。即该代码对应的一个执行环境,叫做执行上下文。
在JavaScript中运行环境有:
- 全局环境:js代码执行起来,首先就进去全局环境
- 函数环境:当函数被调用执行时,会进入函数中执行
- eval:不建议使用,原因:不易调试(在ChromeDev等环境下不能打断点),性能低(不可预测,编译的时间会很慢)
执行上下文的特点
- 单线程(js就是单线程的)
- 同步执行(按顺序执行,不能同时执行)
- 全局上下文只有一个
- 函数的执行上下文的数量没有限制
- 每次某个函数被调用时,都会有新的执行上下文,即使是调用函数自身
执行上下文的生命周期
主要分为两个阶段:
创建阶段:
- 生成变量对象
- 建立作用域链
- 确定this指向
执行阶段:
- 活动对象
- 变量赋值
- 函数引用
- 执行代码
变量对象和活动对象的区别在于执行周期不一样,在创建阶段叫做变量对象,在执行阶段叫做活动对象。
结束,回收。
变量对象(variable object,VO)
VO是一个与执行上下文相关的特殊对象,它存储在上下文中声明一下内容:
- 创建arguments对象(函数的形参)
- 检查function函数声明创建属性(函数声明,缩写为FD)
- 检查var变量声明创建属性(变量声明,var)
内容待补充~~~