1 定义
每次当控制器转到ECMAScript可实行代码的时刻,即会进入到一个实行上下文。实行上下文(简称-EC)是ECMA-262规范里的一个抽象观点,用于同可实行代码(executable code)观点举行辨别。
规范规范没有从手艺完成的角度定义EC的正确范例和构造,这应该是详细完成ECMAScript引擎时要斟酌的题目。
运动的实行上下文组在逻辑上构成一个客栈。客栈底部永远都是全局上下文(global context),而顶部就是当前(运动的)实行上下文。客栈在EC范例进入和退出上下文的时刻被修正(推入或弹出)。
2 全局代码
全局代码不包括任何function体内的代码。
在初始化(顺序启动)阶段,ECStack是如许的:
ECStack = [
globalContext
];
3 函数代码
当进入funtion函数代码(一切范例的funtions)的时刻,ECStack被压入新元素。须要注重的是,详细的函数代码不包括内部函数(inner functions)代码。以下所示,我们使函数本身调本身的体式格局递归一次:
(function foo(bar) {
if (bar) {
return;
}
foo(true);
})();
那末,ECStack以以下体式格局被转变:
// 第一次foo的激活挪用
ECStack = [
<foo> functionContext
globalContext
];
// foo的递归激活挪用
ECStack = [
<foo> functionContext – recursively
<foo> functionContext
globalContext
];
每次return的时刻,都邑退出当前实行上下文的,响应地ECStack就会弹出,栈指针会自动挪动位置,这是一个典范的客栈完成体式格局。一个抛出的非常假如没被截获的话也有能够从一个或多个实行上下文退出。相干代码实行完今后,ECStack只会包括全局上下文(global context),一直到全部应用顺序完毕。
本文绝大多数内容参考自: http://www.cnblogs.com/TomXu/…