• javascript中的变量、作用域和垃圾回收
  • 三公主 发表于 2016/2/29 10:25:00 | 分类标签: javascript教程 垃圾回收
  •  1、变量包含两种不同类型的值:基本类型值和引用类型值。基本类型值是指保存在栈内存中的简单数据段,即完全保存在内存中的一个位置。引用类型值是指保存在堆内存中的对象,即变量中保存的实际上只是一个指针,这个指针指向内存的另一个保存对象的位置。

    (1)对于基本类型值的变量,是按值访问的;对于引用类型值,首先从栈中读取内存地址,找到保存在堆中的值,即按引用访问。

    (2)基本类型值不能动态添加属性;引用类型值可以动态的添加属性。

    (3)在复制变量值时,基本类型值是复制一个具体的值,在改变其中一个变量的时候,不会影响另一个变量;引用类型值是复制一个引用,在改变其中一个变量的时候,会影响另一个变量。

    (4)检测一个变量的类型,使用 typeof 操作符和 instanceof 操作符,typeof 用于基本类型值,instanceof 用于引用类型值:variable instanceof constructor //true or false

    2、执行环境和作用域

    (1)执行环境(execution context)定义了变量或函数有权访问的数据,即变量对象(variable object)。执行环境包括全局执行环境和局部执行环境。

    (2)当代码在执行环境中运行时,会创建由对象构成的一个作用域链(scope chain)。作用域连是保证对执行环境有权访问的所有变量和函数的有序访问。当执行环境为全局执行环境时,作用域链是当前全局的变量对象;当执行环境为局部执行环境(函数)时,作用域链的变量对象只包含一个变量,即 arguments 对象。

    (3)使用 try-catch 语句的 catch 块以及 with 语句,都能延长作用域链。

    (4)JavaScript

     中没有块级作用域,如:

    if (true) {
      var test = "test";
    
    }
    alert(test); //test
    

    3、垃圾回收机制

    (1)类型:主要包括标记清除(mark-and-sweep)和引用计数(reference counting)。JavaScript 使用的垃圾回收机制都是标记清楚,而 IE 中的 COM 对象使用的是引用计数。

    (2)工作方式:如果垃圾收集例程回收的内存分配量低于 15%,则变量、字面量和数组元素的临界值就会加倍;如果例程回收了 85% 的内存分配量,则将各种临界值重置为默认值。

    (3)解除引用:执行中的代码只保存必要的数据,一旦数据不再使用,便将其值设置为 null 来释放其引用。

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:三公主
  • 加入时间:2013/7/2 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮