Javascript的“上下文”(context)

一:JavaScript中的“上下文“指的是什么

百科中这样定义:

上下文是从英文context翻译过来,指的是一种环境。

在软件工程中,上下文是一种属性的有序序列,它们为驻留在环境内的对象定义环境。

在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步、事务、实时激活、安全性等等。又比如计算机技术中,相对于进程而言,上下文就是进程执行时的环境。

具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。

JavaScript的执行上下文的理解是一种大概模糊的理解(译者)。

上下文的原意是content,而作用域的原意是scope。

scope指的是 函数被调用的时候, 各个变量的作用区域
content指的是 函数被调用的时候, 查看this指向哪个object, 那么那个object 就是当前的 "上下文"。

反正我的理解就是:当前执行环境的作用域,因为“上下文”如果离开了执行环境就没有啥实际意义了。

二:JavaScript的两个阶段都干了啥

(1)预“编译”阶段(一定要注意,这个编译,不是编译成机器码的编译):

浏览器的JavaScript引擎“解析”JavaScript代码。

建立arguments对象(隐藏对象,不可见),函数,参数,变量

建立作用域链

确定this的值(或者说指向)

(2)代码执行阶段

浏览器的JavaScript引擎一步步执行代码段,从上至下。

给变量赋值,确定函数的引用。

三:具体代码分析

function foo(z){
    var a="Hi";
    var b=function(){

    };
    function c(){

    }
}

foo("zqz")

预“编译”阶段:

z—>undefined

a—>undefined;

b—>undefined;

c—>function (){}

执行阶段:

z—>"zqz";

a—>"Hi";

b—>function (){};

c—>function c(){}

这里面还有个问题:构建执行环境作用域时,arguments对象(隐藏对象,不可见),函数,参数,变量的声明与构建有先后顺序。

arguments对象(隐藏对象,不可见)—>函数—>参数—>变量

function foo(z){
    console.log(a);
    console.log(b);

    var a = ‘Hi‘;
    var b = function() {

            };

    function a() {

    }
    console.log(a);
    console.log(b);
}

foo("zqz")

结果:function a(){}

undefined    //是变量声明

Hi

function b(){}

按顺序走一遍:arguments—>function a(){}—>z—>var a=‘Hi‘;var b=function(){}

可以结合这篇文章看:

JavaScript权威设计--JavaScript变量,作用域,声明提前(简要学习笔记四)

时间: 2024-10-16 08:52:35

Javascript的“上下文”(context)的相关文章

Javascript 执行上下文 context&scope

执行上下文(Execution context) 执行上下文可以认为是 代码的执行环境. 1 当代码被载入的时候,js解释器 创建一个 全局的执行上下文. 2 当执行函数时,会创建一个 函数的执行上下文. 3 当执行 eval()的时候,创建 一个 eval 执行上下文. # if,for,while 等块不会创建 execution context,从而不会创建 scope. 当js解释器开始工作的时候: 1 首先创建一个 执行上下文栈(后进先出) 2 接着创建一个 全局的执行上下文,并放入执

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

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

再看javascript执行上下文、变量对象

突然看到一篇远在2010年的老文,作者以章节的形式向我们介绍了ECMA-262-3的部分内容,主要涉及到执行上下文.变量对象.作用域.this等语言细节.内容短小而精悍,文风直白而严谨,读完有酣畅淋漓.醍醐灌顶之感,强烈推荐!!! 原文链接:这里 本想翻译成文,原来早已有人做了,这里.真生不逢时,何其遗憾啊! 做个笔记,聊慰我心. 执行上下文 ExecutionContext 每当控制器(control)转换到ECMAScript可执行代码时,都会创建并进入到一个可执行上下文. 一段简短的句子,

什么是上下文(Context)???

计算机技术中,相对于进程而言,上下文就是进程执行时的环境.具体来说就是各个变量和数据,包括所有的寄存器变量.进程打开的文件.内存信息等,在网络上也有些人把 Context 看成是一些公用信息或者把它看做是一个容器.那么获取上下文就是获取这个进程(方法)要执行之前必须需要的环境.就像在windows系统的上安装安卓虚拟机就必须先配置一下java环境.又如,一个软件要运行就不能缺少一些必要的配置文件.也就是说上下文也可以说成是一些信息,因为有依赖关系,所以就必须要先获取到这些信息.举个通俗点的例子就

javascript执行上下文

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

javascript执行上下文环境

今天,想对javascript的执行上下文环境做一个深入的理解.之前一直都有这打算的,但无奈忙着忙着就忘记了.今天看了一篇博客,对执行上下文环境的理解可以说是醍醐灌顶. 一.对一段代码的理解开始 在浏览器的控制台输入以下代码段: 这个结果说明,代码在一句句执行之前,浏览器已经做了一些准备工作,所以,后面两个都没有报错.下面再看一段代码: 这个结果说明,函数声明时,把整个函数赋值了,而函数表达式和变量一样,只是申明. 我们总结一下,在"准备工作"中完成了哪些工作: 变量.函数表达式--变

对于Javascript 执行上下文的理解

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

前后台获取上下文context

1.web server端获取上下文:Context ctx = WafContext.getInstance().getContext();上下文中包含当前登录组织.当前登录用户.语种.数据库.客户端地址等信息 2.web 浏览器端获取上下文:var ctx =waf.getContext();

MVC学习笔记---各种上下文context

0  前言 AspNet MVC中比较重要的上下文,有如下: 核心的上下文有HttpContext(请求上下文),ControllerContext(控制器上下文) 过滤器有关有五个的上下文ActionExecutingContext,ActionExecutedContext,ResultExecutingContext,ResultExecutedContext,ExceptionContext 视图相关的上下文ViewContext 这些上下文之间的关系如下图所示 说明: 1.Contro