Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中。

  全局执行环境是最外围的一个执行环境。全局执行环境被认为是window对象,所有全局变量和函数都作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完后,该环境被销毁,保存在其中的所有变量和函数定义也随之销。

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

  当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的最前端始终是当前执行代码的所在环境的变量对象。如果这个环境是函数,则将其活动对象作为作为变量对象,活动对象最开始只包含一个变量,即arguments对象,作用域中的下一个变量对象是变量对象的包含环境。

  标示符解析就是沿着作用域链一级一级的搜索标示符的过程。

   

  Javascript中所有的变量包括基本类型和引用类型都存在于一个执行环境(作用域)中,执行环境决定了变量的生命周期,以及那一部分代码可以访问其中的变量。

  

  1. 执行环境有全局执行环境和函数执行环境之分。
  2. 每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链。
  3. 函数的局部环境不仅可以有权访问函数的作用域中的变量,而且有权访问器包含的环境(父环境),乃至全局环境。
  4. 全局环境只能访问在全局环境中定义的变量和函数,不能访问局部环境中的任何数据。
  5. 变量的执行环境有助于释放内存。

Javascript高级程序设计——执行环境与作用域的更多相关文章

  1. javascript基础进阶——执行环境及作用域链

    概念 执行环境 执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象. 变量对象 环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境 全局 ...

  2. 【JS】JavaScript中的执行环境与作用域

    JavaScript中的执行环境定义了变量或函数有权访问的数据(每个函数都有自己的执行环境),全局执行环境是最外围的执行环境,在浏览器中,全局执行环境就是window对象,所以所有的全局变量和函数都是 ...

  3. JavaScript:理解执行环境、作用域链和活动对象

    作用域的原理,对JS将如何解析标识符做出了解答.而作用域的形成与执行环境和活动对象紧密相关. 我们对于JS标识符解析的判断,存在一个常见误区 首先,看一个关于JS标识符解析的问题 ,源于风雪之隅提出的 ...

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

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

  5. 《JavaScript高级程序设计》 -- 变量、作用域和内存问题(二)

    1.基本类型与引用类型 基本类型:值保存在变量中 (Number.String.Boolean.Undefined.Null).在内存中占据固定大小空间,被保存在栈内存中 引用类型:值是保存在内存中的 ...

  6. Javascript 函数及其执行环境和作用域

    函数在javascript中可以说是一等公民,也是最有意思的事情,javascript函数其实也是一个对象,是Function类型的实例.因此声明一个函数首先可以使用 Function构造函数: va ...

  7. javascript学习笔记 - 执行环境及作用域

    一 执行环境(环境) 1.每个执行环境都有一个关联的全局变量对象.例如:web浏览器中,window对象为全局变量对象.环境中定义的所有变量和函数都保存在该对象中.全局执行环境是最外围的环境. 2.执 ...

  8. JavaScript高级程序设计-(3) 变量、作用域和内存问题

    传递参数 ECMAScript所有函数参数都是按值传递的,即使对象在函数内部修改了参数的值,原始的引用任然不变,局部对象在函数执行完毕后被销毁

  9. JavaScript 执行环境以及作用域链

    执行环境(execution context,为简单起见,有时也称为"环境")是 JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们 ...

随机推荐

  1. chrome使用技巧

    chrome使用技巧 chrome对于开发人员来说,绝对是一个神器.下面,介绍关于它的一些小技巧: 1.利用chrome快速定位source中的资源. 我之前一般如果查找每个文件,都是打开控制台,在s ...

  2. Can not issue data manipulation statements with executeQuery() 异常处理

    1.这个异常的报错翻译过来就是 不能发出数据操纵语句与executeQuery() 2.这里要检查一下你要执行的实际SQL语句要做什么操作 查询呢?还是修改? 3.如果是修改的话,需要添加@Modif ...

  3. idea community 配置已有的scala工程

  4. Swift学习一

    // 定义一个类 class AClass { } // 数据转换 var a = Int(4.555) // 可选值 var num: Int? = Int("23k") // ...

  5. msbuild

    https://msdn.microsoft.com/zh-cn/library/ms171466(v=vs.100).aspx

  6. Description DisplayName Display的关系

    Description  DisplayName  Display的关系 ?

  7. Python socket编程

    一.什么是socket: socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求 ...

  8. 百度编辑器修改,不让它自动替换html标签

    在ueditor.all.js中找到 UE.plugins['defaultfilter'] = function () 注释或删掉这块代码. 注:ueditor.all.min.js 中也一样,格式 ...

  9. C-基本语法与运算

    编译: Technorati 标记: C 1, 编译compilers 命令make 将高级语言转换为低级语言. clang: 1,预处理(preprocessing) 2,编译(complition ...

  10. python实用笔记,加快编程速度,lamdba,三元运算,open.

    lamdba   表达式.    #   f1=lamdba x:x+1 三元运算                 #    b=True if 1 < 2 else False with op ...