zoukankan      html  css  js  c++  java
  • 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.  
    12. //1.每个函数都有自己的执行环境 
    13. var color = "blue";//全局变量 
    14. function changeColor()
    15. if(color === "blue"){ 
    16. color = "red"
    17. var size = 80
    18. }else
    19. color = "blue"

    20. console.log(size); 

    21. console.log(color); //blue 
    22. changeColor(); 
    23. console.log(color); //red,color的值在changeColor()函数中被改变 
    24. console.log(size);//访问不了size这个变量 
    25.  
    26. //2.在局部作用域中定义的变量可以在局部环境中与全局变量互换使用 
    27. var color = "blue"
    28. function changeColor ()
    29. var anotherColor = "red"
    30. function swapColors()
    31. var tempColor = anotherColor; 
    32. anotherColor = color; 
    33. color = tempColor; 
    34. //这里可以访问color,anotherColor,tempColor 
    35. console.log(color,anotherColor,tempColor); 

    36. swapColors() 
    37. //这里只能访问color anotherColor 
    38. console.log(color,anotherColor); 

    39. //这里只能访问color 
    40. console.log(color); 
    41. changeColor(); 
    42. console.log(color); 
    43. //swapColors(); //这个函数在外部访问不了 
    44. /* 
    45. * 4.2.1 延长作用域链 
    46. * 执行环境的类型总共只有两种:全局和局部(函数) 
    47. * 延长作用域链:有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行完后被移出 
    48. * 1.try-catch语句的cath块,会创建一个新的变量对象; 
    49. * 2.with语句,会将指定的对象添加到作用域链中; 
    50. * */ 
    51.  
    52. //2.with语句会将指定的对象添加到作用域链中 
    53. function buildUrl()
    54. var qs = "?debug=true"
    55. with(location){ 
    56. var url = href + qs; 

    57. return url; 

    58.  
    59. console.log(buildUrl()); 
    60.  
    61. /* 
    62. * 4.2.2 没有块级作用域 
    63. * 1.没有块级作用域 
    64. * 2.由for语句创建的变量即使是在循环结束之后也会依然存在于全局变量中 
    65. * a.声明变量 
    66. * 使用var声明的变量会自动被添加到最接近的环境中,在函数中最接近的环境就是函数的局部环境, 
    67. * 在with语句中最接近的环境就是函数环境 
    68. * 如果初始化没有使用var声明,该变量会自动添加到全局环境 
    69. * b.查询标示符 
    70. * 当在某个环境中为了读取或者写入一个标示符是,必须通过搜索来确定该标示符实际代表什么, 
    71. * 搜素过程从作用域前端开始向上逐级查询与给定名字匹配的标示符 
    72. * 
    73. * */ 
    74.  
    75. //1.没有块级作用域if示例 
    76. if(true){ 
    77. var color = "blue"
    78. } //按照C语言的理解这里是一个块级,但是在javaScript中并不会 
    79. //在if语句中将color添加到了全局作用域中 
    80. function tempColor()
    81. if(color === "blue"){ 
    82. console.log("三碗不过景阳冈");//依然可以取到color的变量 


    83. tempColor(); //三碗不过景阳冈; 
    84.  
    85. //2.由for语句创建的变量即使是在循环结束之后也会依然存在于全局变量中 
    86. for(var i = 0; i< 10; i++){ 
    87. console.log(i); 

    88. console.log(i+"武松"); 
    89.  
    90. //4.2.2 a.声明变量 
    91. num1 = 18;//未声明的全局变量 
    92. function add(num2)
    93. var sum = num1 + num2; 
    94. return sum; 

    95. //add(99); 
    96. console.log(sum);//warning:sum变量是一个全局变量 
    97. console.log(add(99)); 
    98. //使用未声明的全局变量 
    99. function add(num1,num2)
    100. sum = num1 + num2; //未声明的sum变量 
    101. return sum; 

    102. add(99,1); 
    103. console.log(sum); 
    104. //4.4.4 b查询标示符 
    105. var color = "blue"
    106. function getColor()
    107. console.log(color); 

    108. /* 
    109. *调用getColor的过程 
    110. * window 
    111. * | 
    112. * |-------color 
    113. * | 
    114. * |--------------------getColor 
    115. * */ 
    116. getColor(); 
    117. //如果存在一个局部环境中存在着同名标示符,就不会使用位于父环境中的标示符 
    118. var color = "blue"
    119. function getColor()
    120. var color = "red"
    121. console.log(color);//red 

    122. //修改后的函数中声明了一个局部color变量,其值为"red",搜索即停止 
    123. getColor(); 
    124. console.log(color); //blue 
    125. /* 
    126. * -------------------------------------4.3 垃圾收集------------------- 
    127. * JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存 
    128. * 1.标记清除 
    129. * 2.引用计数 
    130. * 3.性能问题 
    131. * 4.管理内存 
    132. * */ 
    每天叫醒的不是闹钟,而是梦想
  • 相关阅读:
    hive 数据类型
    Hive与Hbase结合使用
    Impala介绍
    ZooKeeper管理员指南——部署与管理ZooKeeper
    hbase exporter importer 导出 导入
    Ganglia 安装 for centos6.5
    EPEL for CentOS or Redhat
    hbase->Mapreduce->hbase
    Hadoop YARN配置参数剖析(3)—MapReduce相关参数
    hadoop job 重要性能参数
  • 原文地址:https://www.cnblogs.com/shuiyaodongwu310988929/p/6908639.html
Copyright © 2011-2022 走看看