您的位置:首页 > 其它

执行上下文(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);

如果一个抛出的异常没有被截获的话,也有可能从一个或者多个执行上下文中退出;

等相关代码执行完后,逻辑堆栈只会包含全局上下文,一直到整个程序结束。

理解:

每当执行代码就会产生一个执行上下文,该执行上下文会被推进一个堆栈内处理,处理完了弹出来,根据代码的不同,产生的上下文也不同,但堆栈底部永远是全局上下文。用伪代码比较好理解这个不同如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: