`
weigang.gao
  • 浏览: 467275 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

执行环境及作用域(3.1)

 
阅读更多

      1.  执行环境(execution context,为了简单起见,有时也称为“环境”)是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object)

 

      2.每个执行环境都会有一个与之对应的变量对象(variable object)

 

      3. 环境中定义的所有变量和函数都保存在这个(变量)对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。

 

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

 

      5.   每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的环境。

 

ECMAScript程序中的执行流正是由这个方便的机制控制着。

 

    6. 当代码在一个环境中执行时,会创建变量对象的一个作用域链。

 

      7.  一个执行环境对应一个变量对象

 

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

 

     9.  标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程始终从作用域的前端的开始,然后逐级地向后回溯,知道找到标识符为止(如果找不到通常回导致错误)。

 

   10. 执行环境的类型总共只有两种——全局和局部(函数)

 

没有块级作用域

JavaScript没有块级作用域经常会导致理解上的困惑。在其他类C的语言中,由花括号封闭的代码都有自己的块级作用域(如果用ECMAScript的话来讲,就是它们自己的执行环境),因而支持根据条件来定义变量。例如,下面的代码在JavaScript中并不会得到想象中的结果:

 

if(true){
   var color = “blue”; 没有块级作用域,声明的变量会添加到当前的执行环境中
}
alert(color);//”blue”

 

思考:

情景1:

<script type="text/javascript" >
         if(false){
            var age = 23;
         }
         alert(age);//undefined
</script>

情景2:

<script type="text/javascript" >
         alert(age); //报错
</script>

     1.使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在with语句中,最接近的环境是函数环境。如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境。

 

      2.每个函数继承的toLocaleString()和toString()方法始终都返回函数的代码。返回代码的格式则因浏览器而异——有的返回代码与源代码中的函数代码一样,而有的则返回函数代码的内部表示,即由解析器删除了注释并对某些代码作了改动后的代码。由于存在这些差异,我们无法根据这两个方法返回的结果来实现任何重要功能;另外一个集成的valueOf()方法同样也只返回函数代码

 

分享到:
评论

相关推荐

    Grails 中文参考手册

    6.1.2 控制器和作用域 6.1.3 模型和视图 6.1.4 重定向和链 6.1.5 控制器拦截器 6.1.6 数据绑定 6.1.7 XML和JSON响应 6.1.8 上传文件 6.1.9 命令对象 6.2 Groovy Server Pages 6.2.1 GSP基础 6.2.1.1 变量和作用域 ...

    自学C++教程-入门到精通的初步者

    5. 变量作用域 5.1 局部变量 5.2 全局变量 5.3 初始化局部变量和全局变量 6. 常量 6.1 整数常量 6.2 浮点常量 6.3 布尔常量 6.4 字符常量 6.5 字符串常量 6.6 定义常量 7.修饰符类型 8. 存储类 8.1 auto 存储类 8.2 ...

    Excel vba入门系列讲座.doc

    VBA入门系列讲座 1.1 VBA是什么 1.2 excel环境中基于应用程序自动化的优点 1.3 录制简单的宏 1.4 执行宏 1.5 查看录制的代码 Sub 改变颜色() With Selection.Interior ...4.6 作用域 4.7 小结 4.8 疑难解答

    Python 中文手册

    9.2. Python 作用域和命名空间 9.2.1. 作用域和命名空间示例 9.3. 初识类 9.3.1. 类定义语法 9.3.2. 类对象 9.3.3. 实例对象 9.3.4. 方法对象 9.4. 一些说明 9.5. 继承 9.5.1. 多继承 9.6. 私有变量 9.7. 补充 9.8. ...

    语音扩展标记语言VoiceXML接口规范

    5.2.2.1.2变量的作用域 31 5.2.2.1.3标准会话变量 31 5.2.2.1.4标准应用变量 31 5.2.2.2事件处理 32 5.2.2.2.1 THROW元素 32 5.2.2.2.2 CATCH元素 32 5.2.2.2.3 事件处理的时机 33 5.2.2.2.4速记表示法 33 5.2.2.2.5...

    《Java和Android开发实战详解》第2到5章源代码-by 南邮-陈杨

    5.3 类变量和变量作用域 86 5.3.1 Java的类变量 86 5.3.2 Java的变量作用域 87 5.4 递归程序设计 89 5.4.1 递归方法概述 89 5.4.2 递归的阶乘函数 89 5.5 Math类及其类方法 91 5.5.1 求随机数、最大...

    编译原理全套

    6.3.2 有过程嵌套的静态作用域 6.3.3 动态作用域 6.4 参数传递 6.4.1值调用 6.4.2 引用调用 6.4.3 复写-恢复调用 6.4.4 换名调用 第7章 中间代码生成 7.1 中间语言 7.1.1 后缀表示 7.1.2 图形表示 7.1.3 三...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     1.5.4 其他的集成开发环境和执行环境   1.6 python文档   1.7 比较python(python与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“hello world!...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

     1.5.4 其他的集成开发环境和执行环境   1.6 python文档   1.7 比较python(python与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“hello world!...

    UNIX操作系统教程 张红光

    2.1.2用户的注册与注销11 2.1.3账户的管理12 2.1.4用户口令的管理12 2.1.5...3.1标准编辑器ed42 3.1.1使用ed的基本常识43 3.1.2元字符和正则表达式43 3.1.3如何进入ed、退出ed及保存文本文件44 3.1.4ed中的常用命令44 ...

    [编译原理].陈意云.文字版

    6.3.1 无过程嵌套的静态作用域 6.3.2 有过程嵌套的静态作用域 6.3.3 动态作用域 6.4 参数传递 6.4.1 值调用 6.4.2 引用调用 6.4.3 复写一恢复调用 6.4.4 换名调用1 习题6 第7章 中间代码生成 7.1 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步...

    Visual Basic 2010入门经典.part1.rar

    11.5.4 使用全局(命名空间级)作用域 195 11.5.5 名称冲突 196 11.6 声明静态变量 196 11.7 命名规范 197 11.7.1 使用前缀表示数据类型 197 11.7.2 使用变量前缀表示作用域 198 11.7.3 其他前缀 198 11.8 ...

    Visual Basic 2010入门经典.part2.rar

    11.5.4 使用全局(命名空间级)作用域 195 11.5.5 名称冲突 196 11.6 声明静态变量 196 11.7 命名规范 197 11.7.1 使用前缀表示数据类型 197 11.7.2 使用变量前缀表示作用域 198 11.7.3 其他前缀 198 11.8 ...

    C#经验技巧宝典1-5

    0051 变量的作用域 25 2.5 其他 26 0052 有效使用this对象 26 0053 如何声明变量 26 0054 如何声明相同类型的多个变量 26 0055 利用Object变量传递参数 27 0056 强行改变运算符的运算顺序 27 ...

    《编译原理及实践》电子书下载

    6.3.3 作用域规则和块结构 232 6.3.4 同层说明的相互作用 236 6.3.5 使用符号表的属性文法的一个 扩充例子 237 6.4 数据类型和类型检查 241 6.4.1 类型表达式和类型构造器 242 6.4.2 类型名、类型说明和递归类型 246...

    Python核心编程第二版(ok)

     1.5.4 其他的集成开发环境和执行环境   1.6 Python文档   1.7 比较Python(Python与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,1print语句及“HellocWorld!...

    Python核心编程第二版

     1.5.4 其他的集成开发环境和执行环境   1.6 Python文档   1.7 比较Python(Python与其他语言的比较)   1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“Hello World!...

    网络安全技术与实施-项目3--交换机安全管理与配置.pptx

    学习情景二:网络设备安全管理与配置 ...该模式下的配置命令的作用域是全局性的,是对整个交换机起作用。该模式的命令提示符为:Switch(config)#。 网络安全技术与实施-项目3--交换机安全管理与配置全文共89页,当前

Global site tag (gtag.js) - Google Analytics