执行上下文(Exection Contexts)
2015-08-21 13:57
162 查看
知识点:
执行上下文(EC)是ECMA-262标准的一个抽象概念,没有从技术实现的角度定义标准类型和结构,不同于可执行代码概念。每当控制器转到ECMAScript可执行代码的时候,就会产生一个EC;
活动的执行上下文在逻辑上组成了一个堆栈;
堆栈底部永远是全局上下文(global context),而顶部是当前的活动的执行上下文;
全局上下文(全局代码-globalContext)是在程序级处理的,如外部加载的js文件或者本地script标签内的代码,不包含function内的代码。在程序启动阶段,堆栈内会自动将gobalContext压在最下面;
函数代码:每次进入function(即使function被递归调用或者作为构造函数)的时候(这里了指的是类型为function的函数,不包含函数内部的fuction),产生的执行上下文就会被推入这个堆栈,执行完后就会被弹出该堆栈,栈指针也会自动移动位置;
Eval代码:调用Eval代码所在的上下文,如果在全局则callingContext:globalContext,如果在xxx函数内则callingContext:<xxx>functionContext;
执行上下文包含:变量对象(VO)、this指针(this)和作用域链(Scope Chain),根据现实还可以具有任意额外属性(例如:withObject | catchObject);
如果一个抛出的异常没有被截获的话,也有可能从一个或者多个执行上下文中退出;
等相关代码执行完后,逻辑堆栈只会包含全局上下文,一直到整个程序结束。
理解:
每当执行代码就会产生一个执行上下文,该执行上下文会被推进一个堆栈内处理,处理完了弹出来,根据代码的不同,产生的上下文也不同,但堆栈底部永远是全局上下文。用伪代码比较好理解这个不同如下:
执行上下文(EC)是ECMA-262标准的一个抽象概念,没有从技术实现的角度定义标准类型和结构,不同于可执行代码概念。每当控制器转到ECMAScript可执行代码的时候,就会产生一个EC;
活动的执行上下文在逻辑上组成了一个堆栈;
堆栈底部永远是全局上下文(global context),而顶部是当前的活动的执行上下文;
全局上下文(全局代码-globalContext)是在程序级处理的,如外部加载的js文件或者本地script标签内的代码,不包含function内的代码。在程序启动阶段,堆栈内会自动将gobalContext压在最下面;
函数代码:每次进入function(即使function被递归调用或者作为构造函数)的时候(这里了指的是类型为function的函数,不包含函数内部的fuction),产生的执行上下文就会被推入这个堆栈,执行完后就会被弹出该堆栈,栈指针也会自动移动位置;
Eval代码:调用Eval代码所在的上下文,如果在全局则callingContext:globalContext,如果在xxx函数内则callingContext:<xxx>functionContext;
执行上下文包含:变量对象(VO)、this指针(this)和作用域链(Scope Chain),根据现实还可以具有任意额外属性(例如:withObject | catchObject);
如果一个抛出的异常没有被截获的话,也有可能从一个或者多个执行上下文中退出;
等相关代码执行完后,逻辑堆栈只会包含全局上下文,一直到整个程序结束。
理解:
每当执行代码就会产生一个执行上下文,该执行上下文会被推进一个堆栈内处理,处理完了弹出来,根据代码的不同,产生的上下文也不同,但堆栈底部永远是全局上下文。用伪代码比较好理解这个不同如下:
相关文章推荐
- Qt-提升界面程序的可读性
- Android.mk
- Android DrawerLayout 高仿QQ5.2双向侧滑菜单
- Android国内资源下载
- 安卓 NDK JNI 使用(四) -- Eigen(使用第三方的包)
- MSXML2.ServerXMLHTTP responseText 获取的内容不完整,解决方案
- Quartz2d从易到难全解析---裁剪功能的实现和重绘(刷帧)、动画
- 关于4K超高清电视 你必须知道的十件事
- centos 挂载iscsi 连接网络存储 vnxe
- Oracle的ERP系统中报表不好用?
- PAT 1055. The World's Richest (25)
- 揭开NFV的面纱
- 原本是怎样
- iOS开发:创建真机调试证书
- Eclipse下maven项目报错org.springframework.web.context.ContextLoaderListener解决方案
- Node.js笔记(一):node.js 和 express 的安装和配置
- HDU 1387 Team Queue(优先队列)
- Partitioner分区过程分析
- OpenGL【2 坐标转换】
- c++11特性与cocos2d-x 3.0之std::bind与std::function