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变量,作用域,声明提前(简要学习笔记四)

转载:http://www.cnblogs.com/zqzjs/p/5064807.html

时间: 2024-10-29 21:39:11

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

强悍的上下文Context

在一个框架中,许多地方都要用到上下文(Context),可以说上下文的实现是否到位,直接关系到开发的便捷性及访问效率. 什么是上下文呢?上下文可以认为是在访问者和被访问者之间进行信息传递的纽带.一般的,我们函数之间调用时通过函数参数及返回值来做做数据的传入和传出,但是,这样就会出现不同访问之间的参数都是不同的,在程序中访问的时候,这当然没有问题.但是对于框架来说,它事件不知道你要用什么方式调用,提供的函数及返回值是什么也不知道,这个时候一般来说,会提供一个上下文(Context)来提供数据传入和

笔记 - Android - 6.上下文Context API

Context API:          File getFileDir():返回/data/data/应用程序包名/files 目录(应用程序的files目录)     File getCacheDir():返回/data/data/应用程序包名/cache 目录(应用缓存目录)          ------------          FileOutputStream openFileOutput(String name, int mode):创建一个输出流对象         > n

javascript中如何执行上下文

写在前面:一 直想系统的总结一下学过的javascript知识,喜欢这门语言也热爱这门语言.未来想从事前端方面的工作,提前把自己的知识梳理一下.前面写了些 DOM的知识,略觉水平有限.没几个月就要开赴找工作的前线,奈何自己还是个菜鸟,具体写的时候还没有一个完整的思路.多番考虑之后,决定还是翻译外国的 经典系列文章,总结提升的同时,英语水平也可以上一个台阶,双管齐下,相信对以后肯定有好处.当然这个系列的文章已经有好多人翻译过了,水平都挺高(我翻 译过之后参考了一些语句,在此感谢前辈).要是你觉得我

跟我学习javascript的执行上下文_javascript技巧

在这篇文章里,我将深入研究JavaScript中最基本的部分--执行上下文(execution context).读完本文后,你应该清楚了解释器做了什么,为什么函数和变量能在声明前使用以及他们的值是如何决定的. 1.EC-执行环境或者执行上下文 每当控制器到达ECMAScript可执行代码的时候,控制器就进入了一个执行上下文(好高大上的概念啊). javascript中,EC分为三种: 全局级别的代码 –– 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码

Javascript 中的上下文,我的认识的三个阶段

js 中的 上下文 Context,可以说是一个,你即使不知道,没听过,也不影响你继续写 js 代码的一个概念.但是,它又确确实实是无所不在的一个东西,是的,无所不在. 从我自己的经验来看,对上下文的认识,算是分成了三个阶段,每一个阶段,都让我从外在的表现中,理解了一些更本质上的东西. 第一阶段,不知 我最开始接触 js 的时候,看到了它的 new ,看到了它的 this ,很自然地会把 js 和其它的一些 OOP 语言等同起来看待,并且,好像,也是这么回事.比如: var Class = fu

JavaScript的面向对象编程基础_基础知识

重新认识面向对象为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念: 一切事物皆对象 对象具有封装和继承特性 对象与对象之间使用消息通信,各自存在信息隐藏 以这三点做为依据,C++ 是半面向对象半面向过程语言,因为,虽然他实现了类的封装.继承和多态,但存在非对象性质的全局函数和变量.Java.C# 是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在.但这里函数本身是一个过程,只是依附在某个类上. 然

深入浅出妙用Javascript中apply、call、bind

这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂的知识.我只写那些我还没有完全掌握的东西,那些我精通的东西,往往没有动力写.炫耀从来不是我的动机,好奇才是." 对于这句话,不能赞同更多,也让我下决心好好写这篇,网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且列出一些它们的妙

[译] Javascript 中多样的 this

本文讲的是[译] Javascript 中多样的 this, 原文地址:The many faces of this in javascript 原文作者:Michał Witkowski 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:lsvih 校对者:lampui, zerosrat 本文将尽量解释清楚 JavaScript 中最基础的部分之一:执行上下文(execution context).如果你经常使用 JS 框架,那理解 this 更是锦

全面理解面向对象的 JavaScript

全面理解面向对象的 JavaScript JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征.本文将回归面向对象本意,从对语言感悟的角度阐述为什么 JavaScript 是一门彻底的面向对象的语言,以及如何正确地使用这一特性. 前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架