Javascript学习-执行上下文(Execution Contexts)

一。ECStack

执行上下文是一个堆栈,每次进入function时,则会将该function context压入栈,当从function 退出时候,则会从ECStack弹出该Function context.

二。Global Contexts

在程序初始化时候,则会压入到ECStacks中,例如:

ECStack = [
  globalContext
];

三。Function Code

当执行进入Function时,ECStack 将会push 进一个新的Item,需要注意的是,该新的Item不包含Function内部的Funtion.

(function foo(flag) {
  if (flag) {
    return;
  }
  foo(true);
})(false);
当递归执行foo时候,ECStack的状况表现如下:
// first activation of foo
ECStack = [
  <foo> functionContext
  globalContext
];

// recursive activation of foo
ECStack = [
  <foo> functionContext – recursively
  <foo> functionContext
  globalContext
];

对于抛出未被catch的异常,将会导致从一个或者多个Context中退出。

四。Eval Code

eval 定义的变量和函数,影响的是调用该 eval的context,例如:

// influence global context
eval(‘var x = 10‘);

(function foo() {
  // and here, variable "y" is
  // created in the local context
  // of "foo" function
  eval(‘var y = 20‘);
})();

alert(x); // 10
alert(y); // "y" is not defined
ECStack = [
  globalContext
];

// eval(‘var x = 10‘);
ECStack.push({
  context: evalContext,
  callingContext: globalContext
});

// eval exited context
ECStack.pop();

// foo funciton call
ECStack.push(<foo> functionContext);

// eval(‘var y = 20‘);
ECStack.push({
  context: evalContext,
  callingContext: <foo> functionContext
});

// return from eval
ECStack.pop();

// return from foo
ECStack.pop();
时间: 2024-10-03 13:10:23

Javascript学习-执行上下文(Execution Contexts)的相关文章

深入理解Javascript之执行上下文(Execution Context)

在这篇文章中,将比较深入地阐述下执行上下文 - Javascript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数以及变量在没有被声明以前就可以被使用,以及它们的最终的值是怎样被定义的.什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 - 当执行一个函数时,运行函数体中的代码. Eva

理解Javascript之执行上下文(Execution Context)

1>什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 - 当执行一个函数时,运行函数体中的代码. Eval的代码 - 在Eval函数内运行的代码. javascript是一个单线程语言,这意味着在浏览器中同时只能做一件事情.当javascript解释器初始执行代码,它首先默认进入全局上下文.每次调用一个函数将会创建一个新的执行上下文. 每次新创建的一个执行上下文会被添加

深入理解JavaScript系列+ 深入理解javascript之执行上下文

http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html http://blog.csdn.net/hi_kevin/article/details/37761919    深入理解javascript之执行上下文(execution context)

了解JavaScript的执行上下文

转自http://www.cnblogs.com/yanhaijing/p/3685310.html 什么是执行上下文? 当JavaScript代码运行,执行环境非常重要,有下面几种不同的情况: 全局代码--你的代码首次执行的默认环境. 函数代码--每当进入一个函数内部. Eval代码--eval内部的文本被执行时. 在网上你能读到许多关于作用域(scope)的资源,本文的目的是让事情变得更简单,让我们将术语执行上下文想象为当前被执行代码的环境/作用域.说的够多了,现在让我们看一个包含全局和函数

深入理解javascript执行上下文(Execution Context)

本文转自:http://blogread.cn/it/article/6178 在这篇文章中,将比较深入地阐述下执行上下文 - Javascript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数以及变量在没有被声明以前就可以被使用,以及它们的最终的值是怎样被定义的. 什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的

JavaScript的执行上下文

在JavaScript的运行过程中,经常会遇到一些"奇怪"的行为,不理解为什么JavaScript会这么工作. 这时候可能就需要了解一下JavaScript执行过程中的相关内容了. 执行上下文 在JavaScript中有三种代码运行环境: Global Code JavaScript代码开始运行的默认环境 Function Code 代码进入一个JavaScript函数 Eval Code 使用eval()执行代码 为了表示不同的运行环境,JavaScript中有一个执行上下文(Exe

【深入理解javascript】执行上下文

参考原文:执行上下文 1.每一个执行上下文,工作分为三个阶段: 准备阶段–>执行阶段–>调用阶段 准备阶段:代码执行之前,设置数据,相当于初始化. 执行阶段:开始执行每一行代码. 调用阶段:可能没有.如果有函数调用,产生新的执行上下文.函数每被调用一次,都会产生一个新的执行上下文环境. 2.代码段 javascript在执行一个代码段之前,都会进行"准备工作"来生成执行上下文.这个"代码段"其实分三种情况--全局代码,函数体,eval代码. 全局代码是一

js笔记---作用域(执行上下文[execution context],活动对象) 闭包

(一)作用域: 首先,在javascript中的每个函数都是对象,是Funtion对象的一个实例,而Funtion中有一系列仅供javascript引擎存取的内部属性,其中一个便是[[scope]],它包含了一个函数被创建的作用域中对象的集合,这个集合就是函数的作用域链.当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充.例如定义下面这样一个函数: function add(num1,num2){var sum = num1+num2; return sum; } 在函数

javascript之执行上下文

执行上下文 一个执行上下文可以抽象成一个简单对象.每个执行上下文有系列的属性(我们可以叫做上下文的状态)来跟踪关联代码的处理. 下面的图是一个上下文的结构: 除了这三个必须的属性(变量对象,this对象和作用域链),一个执行上下文可能有其他的附加状态依赖于实现.