天天看点

Javascript的“上下文”(context)

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

百科中这样定义:

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

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

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

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

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

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

scope指的是 函数被调用的时候, 各个变量的作用区域

content指的是 函数被调用的时候, 查看this指向哪个object, 那么那个<code>object</code> 就是当前的 "上下文"。

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

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

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

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

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

          建立作用域链

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

 (2)代码执行阶段

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

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

三:具体代码分析

Javascript的“上下文”(context)
Javascript的“上下文”(context)

预“编译”阶段:

    z—&gt;undefined

    a—&gt;undefined;

    b—&gt;undefined;

    c—&gt;function (){}

执行阶段:

    z—&gt;"zqz";

    a—&gt;"hi";

    b—&gt;function (){};

    c—&gt;function c(){}

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

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

Javascript的“上下文”(context)
Javascript的“上下文”(context)

结果:function a(){}    

            undefined    //是变量声明

            hi

            function b(){}

按顺序走一遍:arguments—&gt;function a(){}—&gt;z—&gt;var a='hi';var b=function(){}

可以结合这篇文章看:

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

继续阅读