2017-5-26执行环境及租用域

执行环境及作用域

  • 执行环境及作用域
  • 执行环境及作用域

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

      *全局执行环境:是最外围的一个执行环境,全局执行环境直到应用程序退出时才会被销毁;

    • 1.每个函数都有自己的执行环境
    • 2.在局部作用域中定义的变量可以在局部环境中与全局变量互换使用
  • 4.2.1 延长作用域链
    • 执行环境的类型总共只有两种:全局和局部(函数)
    • 延长作用域链:有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行完后被移出
    • 1.try-catch语句的cath块,会创建一个新的变量对象;
    • 2.with语句,会将指定的对象添加到作用域链中;
  • 4.2.2 没有块级作用域
    • 1.没有块级作用域
    • 2.由for语句创建的变量即使是在循环结束之后也会依然存在于全局变量中
    • a.声明变量
    • 使用var声明的变量会自动被添加到最接近的环境中,在函数中最接近的环境就是函数的局部环境,
    • 在with语句中最接近的环境就是函数环境
    • 如果初始化没有使用var声明,该变量会自动添加到全局环境
    • b.查询标示符
    • 当在某个环境中为了读取或者写入一个标示符是,必须通过搜索来确定该标示符实际代表什么,
    • 搜素过程从作用域前端开始向上逐级查询与给定名字匹配的标示符
  • JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存
    • 1.标记清除
    • 2.引用计数
  • 3.性能问题
  • 4.管理内存
  1. /**


  2. * Created by Administrator on 2017-5-26. 

  3. */ 

  4. /* 

  5. * ------------------------------ 执行环境及作用域 -------------------- 

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

  7. *全局执行环境:是最外围的一个执行环境,全局执行环境直到应用程序退出时才会被销毁; 

  8. * 1.每个函数都有自己的执行环境 

  9. * 2.在局部作用域中定义的变量可以在局部环境中与全局变量互换使用 

  10. * */ 


  11. //1.每个函数都有自己的执行环境 

  12. var color = "blue";//全局变量 

  13. function changeColor() { 

  14. if(color === "blue"){ 

  15. color = "red"; 

  16. var size = 80; 

  17. }else{ 

  18. color = "blue"; 



  19. console.log(size); 



  20. console.log(color); //blue 

  21. changeColor(); 

  22. console.log(color); //red,color的值在changeColor()函数中被改变 

  23. console.log(size);//访问不了size这个变量 


  24. //2.在局部作用域中定义的变量可以在局部环境中与全局变量互换使用 

  25. var color = "blue"; 

  26. function changeColor (){ 

  27. var anotherColor = "red"; 

  28. function swapColors(){ 

  29. var tempColor = anotherColor; 

  30. anotherColor = color; 

  31. color = tempColor; 

  32. //这里可以访问color,anotherColor,tempColor 

  33. console.log(color,anotherColor,tempColor); 



  34. swapColors() 

  35. //这里只能访问color anotherColor 

  36. console.log(color,anotherColor); 



  37. //这里只能访问color 

  38. console.log(color); 

  39. changeColor(); 

  40. console.log(color); 

  41. //swapColors(); //这个函数在外部访问不了 

  42. /* 

  43. * 4.2.1 延长作用域链 

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

  45. * 延长作用域链:有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行完后被移出 

  46. * 1.try-catch语句的cath块,会创建一个新的变量对象; 

  47. * 2.with语句,会将指定的对象添加到作用域链中; 

  48. * */ 


  49. //2.with语句会将指定的对象添加到作用域链中 

  50. function buildUrl(){ 

  51. var qs = "?debug=true"; 

  52. with(location){ 

  53. var url = href + qs; 



  54. return url; 




  55. console.log(buildUrl()); 


  56. /* 

  57. * 4.2.2 没有块级作用域 

  58. * 1.没有块级作用域 

  59. * 2.由for语句创建的变量即使是在循环结束之后也会依然存在于全局变量中 

  60. * a.声明变量 

  61. * 使用var声明的变量会自动被添加到最接近的环境中,在函数中最接近的环境就是函数的局部环境, 

  62. * 在with语句中最接近的环境就是函数环境 

  63. * 如果初始化没有使用var声明,该变量会自动添加到全局环境 

  64. * b.查询标示符 

  65. * 当在某个环境中为了读取或者写入一个标示符是,必须通过搜索来确定该标示符实际代表什么, 

  66. * 搜素过程从作用域前端开始向上逐级查询与给定名字匹配的标示符 



  67. * */ 


  68. //1.没有块级作用域if示例 

  69. if(true){ 

  70. var color = "blue"; 

  71. } //按照C语言的理解这里是一个块级,但是在javaScript中并不会 

  72. //在if语句中将color添加到了全局作用域中 

  73. function tempColor(){ 

  74. if(color === "blue"){ 

  75. console.log("三碗不过景阳冈");//依然可以取到color的变量 





  76. tempColor(); //三碗不过景阳冈; 


  77. //2.由for语句创建的变量即使是在循环结束之后也会依然存在于全局变量中 

  78. for(var i = 0; i< 10; i++){ 

  79. console.log(i); 



  80. console.log(i+"武松"); 


  81. //4.2.2 a.声明变量 

  82. num1 = 18;//未声明的全局变量 

  83. function add(num2){ 

  84. var sum = num1 + num2; 

  85. return sum; 



  86. //add(99); 

  87. console.log(sum);//warning:sum变量是一个全局变量 

  88. console.log(add(99)); 

  89. //使用未声明的全局变量 

  90. function add(num1,num2){ 

  91. sum = num1 + num2; //未声明的sum变量 

  92. return sum; 



  93. add(99,1); 

  94. console.log(sum); 

  95. //4.4.4 b查询标示符 

  96. var color = "blue"; 

  97. function getColor(){ 

  98. console.log(color); 



  99. /* 

  100. *调用getColor的过程 

  101. * window 

  102. * | 

  103. * |-------color 

  104. * | 

  105. * |--------------------getColor 

  106. * */ 

  107. getColor(); 

  108. //如果存在一个局部环境中存在着同名标示符,就不会使用位于父环境中的标示符 

  109. var color = "blue"; 

  110. function getColor(){ 

  111. var color = "red"; 

  112. console.log(color);//red 



  113. //修改后的函数中声明了一个局部color变量,其值为"red",搜索即停止 

  114. getColor(); 

  115. console.log(color); //blue 

  116. /* 

  117. * -------------------------------------4.3 垃圾收集------------------- 

  118. * JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存 

  119. * 1.标记清除 

  120. * 2.引用计数 

  121. * 3.性能问题 

  122. * 4.管理内存 

  123. * */ 

时间: 2024-10-11 10:21:28

2017-5-26执行环境及租用域的相关文章

*JS:执行环境、变量对象、活动对象和作用域链

var a=1; function b(x){ var c=2; console.log(x); } b(3); ·执行环境(execution context),也称为环境.执行上下文.上下文环境.执行上下文环境: 每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文.执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分. 通俗的话来讲就是,JS中的函数运行不能仅仅看函数内部有哪些变量,再简单的

JavaScript执行环境及作用域

执行环境(executin context)是JS中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象 ,但解析器在处理数据时会在后台使用它. 全局执行环境是最外围的一个执行环境.根据JS实现的宿主环境不同,表示执行环境的对象也不一样.在Web浏览器中,全局执行环境被认为是Window对象,因此所有全局变量和函

javascript的apply和call,执行环境,垃圾回收,闭包

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

js函数绑定同时,如何保留代码执行环境?

经常写js的程序员一定不会对下面这段代码感到陌生. 1 var EventUtil = { 2 3 addHandler : function(element, type, handler){ 4 if(element.addEventListener){ 5 element.addEventListener(type, handler, false); 6 }else if(element.attachEvent){ 7 element.attachEvent("on"+type,h

在非域环境中修改域用户密码的方法

前几天有个单位,新配置了一台服务器,做文件服务器,为网络中提供共享文件夹服务,该单位大约有50多个用户.服务器采用Windows Server 2008 R2操作系统,升级到Active Directory,为单位每个职工创建了一个用户名,在服务器上除了为每个用户创建一个"共享文件夹"保存个人数据外,还创建了"公共"共享文件夹,保存单位的数据,并且在公共文件夹中创建了若干子目录,通过用户权限,设置只让指定用户上传.修改其中的文件. 在开始规划的时候,是计划让单位的所

Angular 2 实验1:Windows 7上安装执行环境

2017-04-12 补充说明: 默认安装了 python-2.7.13.amd64.msi 之后,执行下面的命令,提示[VCBuild.exe]不存在,要求 npm install 1 提示错误: MSBUILD : error MSB3428: 未能加载 Visual C++ 组件"VCBuild.exe".要解决此问题,1) 安装 .NET Framework 2.0 SDK:2) 安装 Microsoft Visual Studio 2005 :或 3) 如果将该组件安装到了其

vue开发环境配置跨域,一步到位

本文要实现的是:使用vue-cli搭建的项目在开发时配置跨域,上线后不做任何任何修改,接口也可以访问,前端跨域解决方案 production:产品 生产环境 development:开发 开发环境 1.开发环境设置跨域 使用工具:vue-cli自带的配置 配置目录 /config/index.js //自行复制黏贴 proxyTable: { '/apis':{ target: 'http://10.1.63.26:19080/', // 后台api changeOrigin: true, //

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

JavaScript中的执行环境定义了变量或函数有权访问的数据(每个函数都有自己的执行环境),全局执行环境是最外围的执行环境,在浏览器中,全局执行环境就是window对象,所以所有的全局变量和函数都是作为window对象的属性和方法创建的.当某一个执行环境中所有代码执行完成后,该环境就被销毁,保存在其中的变量和函数也将被销毁,全局执行环境在关闭网页或浏览器时才被销毁. 当代码在一个环境中执行时,会创建变量对象的一个作用域链(保证对执行环境有权访问的变量和函数的有序访问),如果环境是函数,将其活动

2017/02/26学习笔记

堆 栈和内存映射 每个线程都有自己的专属栈,先进后出栈的最多尺寸固定,超出则引起栈溢出一个线程 一个栈,多个线程多个栈.变量离开作用域范围后,栈上的数据会自动释放堆上的内存必须手动释放,除非语言执行环境支持GC怎么选择栈还是堆? 明确知道数据占用多少内存数据很小大量内存不确定需要多少内存 int i=0; scanf("%d",&i); int array[i];//非法,定义数组的时候,必须是常量,而不能是变量 int *arr = malloc(sizeof(int)*i)