Javascript中的执行环境及作用域
执行环境(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中的执行环境及作用域相关推荐
- JavaScript中的执行环境
JavaScript中的执行环境 注意区分函数的执行环境和函数声明环境 看代码: 转载于:https://www.cnblogs.com/mc67/p/5190179.html
- js中执行php语句_重温JS中的执行环境和作用域链
说明:以下代码说明和原理都是基于ES5和非严格模式进行 执行环境和作用域链 执行环境定义了变量或函数有权访问的其他数据.每个执行环境都有与之关联的变量对象,一般情况下我们无法访问变量对象,解析器会在我 ...
- JavaScript语言精粹--执行环境及作用域,this
1.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为. 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 虽然我们无法访问,但是解析器在处理数据时 ...
- VO、AO、执行环境和作用域链
1.变量对象(variable object) 原文:Every execution context has associated with it a variable object. Variabl ...
- JavaScript执行环境及作用域(一)——执行环境栈和作用域链机制
2019独角兽企业重金招聘Python工程师标准>>> 执行环境是JavaScript中最为重要的一个概念,每个执行环境都有一个与之关联的变量对象,执行环境中所有的变量和函数都保存在 ...
- 从头开始学JavaScript (九)——执行环境和作用域
一.执行环境:定义了变量或者函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有与之关联的变量对象. 变量对象:保存着环境中定义的变量和函数. 作用域链:保证对执行环境有权访问的所有变量和函 ...
- javaScript执行环境、作用域链与闭包
一.执行环境 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象 ...
- # JavaScript中的执行上下文和队列(栈)的关系?
原文:What is the Execution Context & Stack in JavaScript? git地址:JavaScript中的执行上下文和队列(栈)的关系? 导读:以前总 ...
- 执行环境,作用域链,闭包
执行环境 执行环境是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存 ...
- 闭包、执行环境、作用域链
闭包是指有权访问另一个函数作用域中的变量的函数,创建的常见方式就是在一个函数内部创建另一个函数. 我们来理解下执行环境和作用域链: 1.执行环境有全局执行环境和函数执行环境之分. 2.每次进入一个新的 ...
最新文章
- cas server 配置
- 题目1112:拦截导弹
- opcclient远程连接opc服务器_软件 | 服务器远程连接软件MobaXterm
- vim编辑器之按键说明
- python中bar的用法_python使用matplotlib绘图 -- barChart
- 程序员你造吗?2016年加州将建造子弹头火车,你还在CODE?
- 函数的实参 函数的形参 闭包 js 1
- 习题:Dual Matrices(思路题/分治)
- too many connections的一个实践
- 卸载cad专用软件工具箱 一键安装卸载,安全可靠
- 什么是:arguments
- [vijos 1770]大内密探
- VS2017,MFC对WPS下Excel表格的操作
- ‘Authentication failed.‘ on server xx.xx.xxx.x:27017. The full response is { “ok“ : 0.0, “errmsg“
- 物联网技术与应用期末大作业
- inplace = True 是什么意思
- Pytorch错误集锦
- 算法基础:4115:鸣人和佐助--广度优先搜索
- 音速索尼克 怪人_科学怪人,半死僵尸和其他怪物
- linux 开机自启动 Tomcat