内存回收

手动回收(对象设置为null)

  1. a = null;

自动回收(对象没有被引用就视为垃圾回收)

  1. 局部变量和全部变量
    1. 局部变量当函数执行完成垃圾回收器就回收。
    2. 全部变量什么时候需要自动释放很难判断,所以尽量少用全局变量。

垃圾回收算法

  1. 引用计数算法
  2. 标记清楚算法

内存泄露如果避免

  1. 意外的全局变量
    1. 解决方法:
      1. 尽量少用全局变量
      2. 在 JavaScript文件头部加上 ‘use strict’,使用严格模式避免意外的全局变量。
      3. 局部变量一定要用var、let
         function foo(arg) {
           bar = "this is a hidden global variable";
        }
        
  2. 被遗忘的定时器
  3. 脱离了DOM的引用
    1. 表现:如果把DOM 存成字典(JSON 键值对)或者数组,此时,同样的 DOM 元素存在两个引用:一个在 DOM 树中,另一个在字典中。那么将来需要把两个引用都清除
    2. 解决方法
      1. DOM树、字典或者数组同时要删除
  4. 闭包