执行环境(exectution context)定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。

全局执行环境是最外围的一个执行环境。在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直到应用程序退出--例如关闭网页或浏览器时才会被销毁)。

每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。ECMAScript程序中的执行流正是由这个方便的机制控制着。

当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即arguments对象(这个对象在全局环境中是不存在的)。作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。

其中,内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。这些环境之间的联系是线性、有次序的。每个环境都可以向上搜索作用域链,以查询变量和函数名;但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。

延长作用域链:

有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。

try-catch语句的catch块和with语句。

这两个语句都会在作用域链的前端添加一个变量对象。对with语句来说,会将指定的对象添加到作用域链中。对catch语句来说,会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明。

1 function addUrl(){
2 var data= “?debug=true”;
3 with(location){
4 var url = href+data;
5 }
6 return url;
7 }

在此,with语句接收的是location对象,因此其变量对象中就包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域链的前端。addUrl()函数中定义了一个变量data。当在with语句中引用变量href时(实际引用的是location.href),可以在当前执行环境的变量对象中找到。当引用变量data时,引用的则是在addUrl()中定义的那个变量,而该变量位于函数环境的变量对象中。至于with语句内部,则定义了一个名为url的变量,因而url就成了函数执行环境的一部分,所以可以作为函数的值返回。

Javascript没有块级作用域。

转载于:https://www.cnblogs.com/bingoart/p/4684720.html

Javascript中的执行环境及作用域相关推荐

  1. JavaScript中的执行环境

    JavaScript中的执行环境 注意区分函数的执行环境和函数声明环境 看代码: 转载于:https://www.cnblogs.com/mc67/p/5190179.html

  2. js中执行php语句_重温JS中的执行环境和作用域链

    说明:以下代码说明和原理都是基于ES5和非严格模式进行 执行环境和作用域链 执行环境定义了变量或函数有权访问的其他数据.每个执行环境都有与之关联的变量对象,一般情况下我们无法访问变量对象,解析器会在我 ...

  3. JavaScript语言精粹--执行环境及作用域,this

    1.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为. 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 虽然我们无法访问,但是解析器在处理数据时 ...

  4. VO、AO、执行环境和作用域链

    1.变量对象(variable object) 原文:Every execution context has associated with it a variable object. Variabl ...

  5. JavaScript执行环境及作用域(一)——执行环境栈和作用域链机制

    2019独角兽企业重金招聘Python工程师标准>>> 执行环境是JavaScript中最为重要的一个概念,每个执行环境都有一个与之关联的变量对象,执行环境中所有的变量和函数都保存在 ...

  6. 从头开始学JavaScript (九)——执行环境和作用域

    一.执行环境:定义了变量或者函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有与之关联的变量对象. 变量对象:保存着环境中定义的变量和函数. 作用域链:保证对执行环境有权访问的所有变量和函 ...

  7. javaScript执行环境、作用域链与闭包

    一.执行环境 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象 ...

  8. # JavaScript中的执行上下文和队列(栈)的关系?

    原文:What is the Execution Context & Stack in JavaScript? git地址:JavaScript中的执行上下文和队列(栈)的关系? 导读:以前总 ...

  9. 执行环境,作用域链,闭包

    执行环境 执行环境是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存 ...

  10. 闭包、执行环境、作用域链

    闭包是指有权访问另一个函数作用域中的变量的函数,创建的常见方式就是在一个函数内部创建另一个函数. 我们来理解下执行环境和作用域链: 1.执行环境有全局执行环境和函数执行环境之分. 2.每次进入一个新的 ...

最新文章

  1. cas server 配置
  2. 题目1112:拦截导弹
  3. opcclient远程连接opc服务器_软件 | 服务器远程连接软件MobaXterm
  4. vim编辑器之按键说明
  5. python中bar的用法_python使用matplotlib绘图 -- barChart
  6. 程序员你造吗?2016年加州将建造子弹头火车,你还在CODE?
  7. 函数的实参 函数的形参 闭包 js 1
  8. 习题:Dual Matrices(思路题/分治)
  9. too many connections的一个实践
  10. 卸载cad专用软件工具箱 一键安装卸载,安全可靠
  11. 什么是:arguments
  12. [vijos 1770]大内密探
  13. VS2017,MFC对WPS下Excel表格的操作
  14. ‘Authentication failed.‘ on server xx.xx.xxx.x:27017. The full response is { “ok“ : 0.0, “errmsg“
  15. 物联网技术与应用期末大作业
  16. inplace = True 是什么意思
  17. Pytorch错误集锦
  18. 算法基础:4115:鸣人和佐助--广度优先搜索
  19. 音速索尼克 怪人_科学怪人,半死僵尸和其他怪物
  20. linux 开机自启动 Tomcat

热门文章

  1. Dubbo2.7源码分析-如何发布服务
  2. iOS内存管理部分内容
  3. MongoDB 将Json数据直接写入MongoDB的方法
  4. AC自动机-算法详解
  5. DELL笔记本大小写切换时鼠标焦点转移的解决办法
  6. 使用5502自带的UART口发送数据乱码的问题
  7. 系列(一):加解密字符串及配置文件(CSASPNETEncryptAndDecryptConfiguration)
  8. windowsC盘msp文件清理
  9. 陈彬 2019-1-17
  10. mac install wget