第 4 章 变量、作用域和内存问题

4.1 基本类型和引用类型的值

1、动态的属性

  • 只能给引用类型动态的添加属性

2、复制变量值

  • 基本类型值

    	- 不会相互影响
    
  • 引用类型值

    	- 指针指向同一个堆内存空间
    

3、传递参数

  • 基本类型

    	- 按值传递,不相互影响
    
  • 引用类型

    	- 按值传递,函数内部变量的变化会反映在函数的外部
    

4、检测类型

  • 基本数据类型

    	- 使用 typeof
    
    		- 检测引用类型,会返回 object, 但却不知道是什么类型的对象
    		- 检测函数, 会返回 function
    		- 检测正则,IE 和 Firefox 返回 object,根据规范不同 有些会返回 function
    
  • 引用类型

    	- 使用 instanceof
    
    		- 检测基本数据类型,始终返回 false, 因为基本类型不是对象
    

4.2 执行环境及作用域

1、执行环境

  • 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。

  • 每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链

  • 类型

    	- 全局执行环境(全局环境)
    
    		- 全局执行环境直到应用程序退 出——例如关闭网页或浏览器——时才会被销毁
    		- 不能直接访问局部环境中的任何数据
    
    	- 局部(函数执行环境)
    
    		- 有权访问函数作用域中的变量
    		- 有权访问父环境、全局环境变量
    		- 有助于确认何时释放内存
    

2、延长作用域链

  • 有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除
  • try-catch 语句的 catch 块
  • with 语句

3、没有块级作用域

  • 声明变量

    	- 使用 var 声明
    
    		- 自动被添加到最接近到环境中
    
    	- 不使用 var 声明
    
    		- 自动被添加到全局环境
    
    	- 注意
    
    		- 初始化变量前,一定要先声明
    
  • 查询标识符

    	- 搜索过程从作用域链的前端开始,如果在局部环境中找到链该标识符,搜索过程停止,变量就绪,如果局部环境没有找到该变量,就沿作用域一直追溯到全局环境到变量对象
    

4.3 垃圾收集

1、标记清除

  • 进入环境

    	- 当变量进入环境时,将这个变量标记为‘进入环境’
    
  • 离开环境

    	- 当变量离开环境时,则将其 标记为“离开环境”
    

2、引用计数

  • 引用计数的含义是跟踪记录每 个值被引用的次数

  • 应用场景

    	- COM 对象的垃圾 收集机制
    
  • 注意

    	- 可能会导致循环引用,永远不会被回收
    

3、性能问题

  • 变量过多,垃圾收集器频繁运行,导致严重的性能问题

4、管理内存

  • 设置 null 解除引用,让值脱离执行环境,以便垃圾收集器下次运行时将其回收

4.4 小结

1、基本类型和引用类型

2、执行环境和作用域

3、垃圾收集

  • 标记清除

  • 引用计数

    	- 不推荐,会导致循环引用的问题
    
  • 及时解除全局对象、全局对象属性、循环引用变量的引用

类型

基本数据类型

  • string 字符串
  • number 数值
  • boolean 布尔值
  • undefined
  • null

引用类型

  • Array 数组
  • Object 对象
  • RegExp 正则
Last Updated: 10/15/2019, 4:55:10 PM