执行上下文的过程

执行上下文的过程

每当调用一个函数时,一个新的执行上下文就会被创建出来。然而,在javascript引擎内部,这个上下文的创建过程具体分为两个阶段:

1.建立阶段(发生在当调用一个函数时,但是在执行函数体内的具体代码以前)

建立变量,函数,arguments对象,参数

建立作用域链

确定this的值

具体过程如下:

1.找到当前上下文中的调用函数的代码

2.在执行被调用的函数体中的代码以前,开始创建执行上下文

3.进入第一个阶段-建立阶段:
    建立variableObject对象:
    建立arguments对象,检查当前上下文中的参数,建立该对象下的属性以及属性值
    检查当前上下文中的函数声明:
        1.每找到一个函数声明,就在variableObject下面用函数名建立一个属性,属性值就是指向该函数在内存中的地址的一个引用

        2.如果上述函数名已经存在于variableObject下,那么对应的属性值会被新的引用所覆盖。

        3.检查当前上下文中的变量声明:
            每找到一个变量的声明,就在variableObject下,用变量名建立一个属性,属性值为undefined。如果该变量名已经存在于variableObject属性中,直接跳过(防止指向函数的属性的值被变量属性覆盖为undefined),原属性值不会被修改。

初始化作用域链 确定上下文中this的指向对象

2.代码执行阶段:

变量赋值,函数引用,执行其它代码
时间: 2024-10-11 02:21:39

执行上下文的过程的相关文章

javascript执行上下文

javascript上下文应该算是js这门语言基础中的基础,如果理解了它,就能比较清晰地理解js语句执行的流程,更好地分析代码. 上下文分类: 1)全局级别的上下文  2)函数级别的上下文  3)eval函数内运行的上下文 执行上下文堆栈 在<javascript高级程序设计>中,上下文被称为执行环境,其实表达的都是同一个东西. 在浏览器中,javascript引擎的工作方式是单线程的.也就是说,某一时刻只有唯一的一个事件是被激活处理的,其它的事件被放入队列中,等待被处理. 我们已经知道,当j

JavaScript学习系列之执行上下文与变量对象篇

一个热爱技术的菜鸟...用点滴的积累铸就明日的达人 正文 在上一篇文章中讲解了JavaScript内存模型,其中有提到执行上下文与变量对象的概念.对于JavaScript开发者来说,理解执行上下文与变量对象的基本理论知识,是理解闭包,原型链的关键所在(闭包与原型链会在接下来的文章中介绍).本篇文章就带你走进JavaScript的执行上下文与变量对象,由于本人才疏学浅,若有什么表述有误的地方,欢迎各位看官能够指点一二,在此不胜感激... 在阅读这边文章之前,默认您已经掌握了JavaScript的基

执行上下文对象的原理及使用

执行上下文对象: 在浏览器执行javascript代码之前,浏览器会做一些准备工作(从准备工作这一操作开始,直到对应的这一作用域的所有代码被执行完,这样的一个过程就叫做执行上下文;执行上下文可以被看成一个对象,这个对象 就是用来管理其对应作用域中的各个数据,这些数据就是对象中的属性). 一. 全局作用域中的一些准备工作     1. 找到标记的全局变量,并为其赋值为undefined;     2. 给this赋值为window对象     3. 函数声明,并给函数赋值为整个函数块 二. 函数作

javascript之执行上下文堆栈

执行上下文堆栈 有三种类型的ECMAScript代码:全局代码,函数代码和eval代码.代码执行在它的执行上下文里. 有唯一的全局上下文,以及可能有多个函数和eval上下文.每一个函数调用,进入到函数的执行上 下文,执行函数的代码.当调用到 eval 函数, 进入到 eval 执行上下文,执行它的代码. 注意到,一个函数或许产生有限个上下文集合,因为每调用一个函数(甚至自身调用)产生一个 新的上下文,并伴随着新的上下文状态: function foo( bar ){} //调用同一函数 //生成

了解JavaScript的执行上下文

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

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

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

Httpclient4.4之原理(Http执行上下文)

最初HTTP被设计为无状态的.然而,真实的应用中常常要能够通过几个逻辑相关的请求/响应保持状态信息.为了使应用程序能够保持一个处理状态,HttpClient允许HTTP请求在特定的执行上下文内执行,称为HTTP上下文.如果相同的上下文在连续的请求之间重用,多个逻辑相关的连续请求可以参与一个逻辑会话.HTTP上下文的功能类似于java.util.Map<String,Object>,它只不过是任意命名的值的集合.应用程序能在请求执行之前填充上下文属性,也能在请求执行完成之后检查上下文. Http

对于Javascript 执行上下文的理解

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

深入理解javascript原型和闭包(11)——执行上下文栈

摘自:http://www.cnblogs.com/wangfupeng1988/p/3989357.html:作者:王福朋: 继续上文的内容. 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境.当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境.处于活动状态的执行上下文环境只有一个. 其实这是一个压栈出栈的过程--执行上下文栈.如下图: 可根据以下代码来详细介绍上下文栈的压栈.出栈过程. 如上代码. 在执行代码之前,首先将创建全局上