var a=1;
function b(x){
var c=2;
console.log(x);
}
b(3);

·执行环境(execution context),也称为环境、执行上下文、上下文环境、执行上下文环境:
  每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文。执行上下文(简称-EC)是
ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code,分为全局代码、函数代码和eval代码)
概念进行区分。
  通俗的话来讲就是,JS中的函数运行不能仅仅看函数内部有哪些变量,再简单的做运算就行了,而是执
行前需要根据函数所处的环境(代码执行前的准备工作),如:变量、函数声明和arguments,来取值(在执
行代码之前,把将要用到的所有的变量都事先拿出来,有的直接赋值了,有的先用undefined占个坑)运算。
  执行环境主要包含变量对象、作用域链和this三部分内容。

·变量对象(variable object):
  变量对象属于执行环境的一部分,每个执行环境都有一个对象用来存储执行环境中的变量、函数声明和
arguments,这个对象就是执行环境的变量对象。
  全局环境的变量对象始终存在,局部环境变量对象只有在函数执行的过程中存在,每个函数都有自己的
执行环境。
  全局环境对象内容包括:var a=undefined、function b(){...}、this=windows。而像b()这样的的局
部变量对象内容包括了:var c=undefined、arguments=[3]、x=3、this=windows。

·活动对象(activation object):
  在函数执行上下文中,VO是不能直接访问的,此时由活动对象(activation object,缩写为AO)扮演VO的
角色。

·作用域链:
  function b(){}创建时,会创建一个预先包含全局变量的作用域链,这个作用域链被保存在[[Scope]]属
性中。当b()调用时会创建一个执行环境,然后通过复制函数的[[Scope]]属性中对象构建起执行环境的作用
域链。随后,又有一个活动对象(在此作为变量对象使用)被创建并推入执行环境作用域前端。对于这个例
子中的执行环境而言,其作用域链包括了2个变量对象:全局变量对象和其内部活动对象。
  显然,作用域链是本质上是一个指向变量对象的指针列表,它只是引用但不实际包含变量对象。

·this:详情移动这里

·执行上下文栈(execution context stack,ECS):
    当我们运行多个函数时,如何管理那么多执行环境呢?
    所以JS引擎创建了执行上下文栈来进行管理。当JS开始解释执行代码时,最先遇到的是全局代码,所以初始
化时首先会向执行上下文栈中压入一个全局执行环境,并且只有当整个应用程序结束后,ECS才会被清空,全局
执行环境在最底部是最后一个被清除的。

·变量的搜索机制:
  先搜索局部变量,如果没找到,往上一层查找,直到搜索全部变量,如果都没找到,返回undefined。

(O)JS:执行环境、变量对象、活动对象和作用域链(原创)的更多相关文章

  1. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链

    今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...

  2. js执行环境相关

    Js执行过程 如果一个文档中存在多个代码段 步骤一:读入第一个代码段(js引擎并非一行一行执行,而是一段一段分析执行) 步骤二:做词法分析和语法分析,有错则报语法错误(比如括号不匹配等),并跳转到步骤 ...

  3. 【repost】 原生JS执行环境与作用域深入理解

    首先,我们要知道执行环境和作用域是两个完全不同的概念. 函数的每次调用都有与之紧密相关的作用域和执行环境.从根本上来说,作用域是基于函数的,而执行环境是基于对象的(例如:全局执行环境即window对象 ...

  4. js执行环境、作用域

    js执行环境.作用域 执行环境:是javascript中的一个重要的概念,<javascript高级程序设计第三版>的定义是:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行 ...

  5. 浅谈JS执行环境及作用域

     今天刚刚开通博客,也是第一次写博文,略感紧张.作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习 ...

  6. Node.js中环境变量process.env详解

    Node.js中环境变量process.env详解process | Node.js API 文档http://nodejs.cn/api/process.html官方解释:process 对象是一个 ...

  7. JS 执行环境与作用域链

    1.执行环境 JavaScript 代码都是在执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生命周期等方面的处理,它定义了变量或函数是否有权访问其他数据 ...

  8. js执行环境深入研究

    js 声明函数是创建函数对象的过程,当创建函数对象时,函数对象的[[scope]] =连当前执行环境对象的作用域(栈顶执行环境--当执行函数时,js会将该函数的执行环境对象入栈) 当为全局函数时,如: ...

  9. JS执行环境,作用域链及非块状作用域

    JS中的执行环境,顾名思义就是变量或函数所执行时的环境.在我的理解中,执行环境和作用域相差不大. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中.而在函数执行之后 ...

  10. js执行环境的周边概念

    一.熟悉几个名词: 1.执行环境(execution context),也叫执行上下文,每个函数都会有自己的执行环境:当浏览器首次加载脚本时,他将默认进入全局执行环境:如果接下来要调用一个内部函数,则 ...

随机推荐

  1. 学习BOS物流项目第十天

    1 教学计划 1.演示权限demo 2.权限概述 a. 认证 b. 授权 3.常见的权限控制方式 a.  url拦截权限控制 b.  方法注解权限控制 4.创建权限数据模型 a.  权限表 b.  角 ...

  2. lunux开放80端口(本地访问不了linux文件可能是这个原因)

    /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT #开启80端口  /etc/rc.d/init.d/iptables save #保存配置  / ...

  3. Eclipse 合并GIT分支

    合并GIT分支: 1.  切换到主分支: 2.  右击项目——Team——Merge…: 3.  在弹出的Merge框中选择要合并的分支——Merge: 4.  合并后如果出现冲突,右击项目——Tea ...

  4. linux中weblogic相关命令操作

    在weblogic的目录下找到bin目录,其中有startWeblogic.sh.startManagerWeblogic.sh等 首先需要启动startWeblogic.sh,这个是管理服务,也就是 ...

  5. iframe解决ajax主域和子域之间的跨域问题

    在某些应用场景下,需要在主域中,调用子域中的某个接口,如果直接在主域中向子域发ajax请求,会报跨域错误,可以用iframe来解决这种跨域问题.假如主域为www.baidu.com,子域为baike. ...

  6. Java 几种锁

    自旋锁 自旋锁顾名思义,它会等待一定时间(自旋),在这期中会什么都不做就是等资源被释放,好处在于没有了内核态用户态切换的效率损失,但是如果它一直不能访问到资源的话就会一直占用cpu资源,所以它会循环一 ...

  7. 【翻译】View Frustum Culling --3 Clip Space Approach – Extracting the Planes

    3.使用裁剪空间的方法提取平面 上一篇中,我们讨论了通过几何的方法提取视锥体的六个片面.在这一篇中,我们继续讨论通过裁剪空间的方法来提取视锥体的平面. 假设现在在世界坐标系中有一点p=(x,yz,1) ...

  8. 基于.net开发chrome核心浏览器【一】(转)

    http://www.cnblogs.com/liulun/archive/2013/03/18/2874276.html 说明: 这是本系列的第一篇文章,我会尽快发后续的文章. 源起 1.加快葬送I ...

  9. openstack(Pike 版)集群部署(八)--- 连接Ceph Cluster 作为后端存储

    一.openstack Glance + ceph Cluster 部署: 博客:http://www.cnblogs.com/weijie0717/p/8563294.html 参考 续 部分.  ...

  10. RedHat 更新CentOS Yum源(转)

    经测试,可用.转自:https://www.cnblogs.com/tangsen/p/5151994.html 一.随笔引言 1.1随笔内容: 1.RedHat 配置Centos yum源 2.yu ...