JS 执行环境与作用域链
1、执行环境
JavaScript 代码都是在执行环境中被执行的。执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域、生命周期等方面的处理,它定义了变量或函数是否有权访问其他数据,决定各自行为。每个执行环境都有一个变量对象(我理解为环境变量对象),在代码执行环境中所有的变量、函数都保存在这个对象中;
全局的执行环境是最外围的执行环境,根据ECMAScript 实现所在的宿主环境同,表示执行环境的对象也不一样,在WEB浏览器中,全局执行环境被认为是Windows对象,因此所有全局变量、函数都是作为Windows 对象的属性、方法创建的,即全局执行环境生命周期直到应用程序退出或者网页关闭才被销毁;
局部执行环境是函数的执行环境,当执行流进入函数时,函数的环境被推入一个环境栈中,而在函数执行完之后,栈将其环境弹出,把控制权返回之前的执行环境,即函数执行完之后该环境下的变量、函数被销毁;
2、作用域链
当代码在一个环境中被执行时,会为变量对象创建一个作用域链对象,该作用域链对象最开始始终都是当前执行的代码所在的变量对象,如果这个环境是函数,则将其活动对象(activation object)作为变量对象,活动对象在最开始时只包含一个变量,即 argumengts 对象。作用域链中的下一个变量对象来做包含(外部),而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境(全局的变量对象),全局执行环境的变量对象始终都是作用连中的最后一个对象;如图:

如果该个环境是函数,则将其活动对象(activation object)作为变量对象,活动对象在最开始时只包含一个变量,即 argumengts 对象。
现在在来看作用域链的用途:保证对执行环境有全访问的所有变量和函数的有序访问,如果在作用域链中找不到就会报错(underfine)
2.1 没有快级作用域
if(true){
var color="blue";
}
alert(color);//blue
如果是强类型语言(c#/java/c/c++等)会报错,但是在js 中会把if语句中声明的变量添加到当前得执行环境中;
备注:以上内容在高级程序设计P73中说的很明白。
JS 执行环境与作用域链的更多相关文章
- JS执行环境,作用域链及非块状作用域
JS中的执行环境,顾名思义就是变量或函数所执行时的环境.在我的理解中,执行环境和作用域相差不大. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中.而在函数执行之后 ...
- JavaScript之一: 闭包、执行环境、作用域链
这是大虾的第一篇博文,大虾试图用最直白的语言去描述出所理解的东西,大虾是菜鸟,水平有限,有误的地方希望路过的朋友们务必指正,谢谢大家了. 从读书时代一路走来,大虾在学习的时候逐渐喜欢上了去追寻根源,这 ...
- javaScript执行环境、作用域链与闭包
一.执行环境 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象 ...
- VO、AO、执行环境和作用域链
1.变量对象(variable object) 原文:Every execution context has associated with it a variable object. Variabl ...
- js执行环境、作用域
js执行环境.作用域 执行环境:是javascript中的一个重要的概念,<javascript高级程序设计第三版>的定义是:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行 ...
- JavaScript:理解执行环境、作用域链和活动对象
作用域的原理,对JS将如何解析标识符做出了解答.而作用域的形成与执行环境和活动对象紧密相关. 我们对于JS标识符解析的判断,存在一个常见误区 首先,看一个关于JS标识符解析的问题 ,源于风雪之隅提出的 ...
- Javascript执行环境、作用域链
执行环境 可以把执行环境想象为一个圆圈,里面包含了一些变量.函数. 执行环境定义了变量或函数的有权访问的其他数据,决定了它们各自的行为.还有一个顶部执行环境.在浏览器中,顶部执行环境既为window, ...
- javascript基础进阶——执行环境及作用域链
概念 执行环境 执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象. 变量对象 环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境 全局 ...
- javascript中函数的执行环境、作用域链、变量对象与活动对象
javascript高级程序设计中:对执行环境.作用域链.变量对象.活动对象的解释: 1.执行环境: 执行环境:有时也叫环境:是JavaScript中最为重要的一个概念:执行环境定义了变量或函数有权访 ...
随机推荐
- phonegap环境搭建
最近在开发app, html5+php 采用phonegap进行打包 前端框架采用jquery mobile 这里phonegap创建安卓项目 3种方式 1.phonegap 2.cordova 3. ...
- poj 2661 Factstone Benchmark (Stirling数)
//题意是对于给定的x,求满足n! <= 2^(2^x)的最大的n//两边同取以二为底的对数,可得: lg2(n!) <= 2^x 1. log2(n!) = log2(1) + lo ...
- Java中SynchronizedMap与ConcurrentHashMap的对比
如何使用 概述 ConcurrentHashMap: 线程安全: 其将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都 ...
- 【转】Linux设备驱动之I/O端口与I/O内存
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/08/2281367.html 一.统一编址与独立编址 该部分来自于:http://blog.ch ...
- 写python时加入缩进设置
发现如果用vim写python的时候,还是设成8好像会报错,在现有的基础上,加入下面设置就好了set shiftwidth=4
- 【转】C# 委托的介绍(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Delegat ...
- 自定义View--一个简单地圆形Progress效果
先看效果图吧 我们要实现一个自定义的再一个圆形中绘制一个弧形的自定义View,思路是这样的: 先要创建一个类ProgressView,继承自View类,然后重写其中的两个构造方法,一个是一个参数的,一 ...
- 12、NFC技术:读写NFC标签中的Uri数据
功能实现,如下代码所示: 读写NFC标签的Uri 主Activity import cn.read.write.uri.library.UriRecord; import android.app.Ac ...
- 帮哥们做的一个整理文档的小工具(C++ string的标准函数还是很给力的,代码在最下)
其实把程序用到生活中,真的能节约不少时间!程序的力量是无穷滴! 哥们的毕业设计是要做法律文书匹配之类的东东,有一步是要抽取所有的法律法规名称,而刚好我们要处理的文件中,法规的名称之前都有个‘.‘,所以 ...
- 设计模式 外观 Facade
外观模式的作用是简化接口.它提供一个统一的接口用来访问子系统的一群接口.通过这个高层接口使子系统更容易使用. 同时,通过外观将客户从组件的子系统中解耦. Head 1st中使用了家庭影院的例子来说明外 ...