内存回收
手动回收(对象设置为null)
- a = null;
自动回收(对象没有被引用就视为垃圾回收)
- 局部变量和全部变量
- 局部变量当函数执行完成垃圾回收器就回收。
- 全部变量什么时候需要自动释放很难判断,所以尽量少用全局变量。
垃圾回收算法
- 引用计数算法
- 标记清楚算法
内存泄露如果避免
- 意外的全局变量
- 解决方法:
- 尽量少用全局变量
- 在 JavaScript文件头部加上 ‘use strict’,使用严格模式避免意外的全局变量。
- 局部变量一定要用var、let
function foo(arg) { bar = "this is a hidden global variable"; }
- 解决方法:
- 被遗忘的定时器
- 脱离了DOM的引用
- 表现:如果把DOM 存成字典(JSON 键值对)或者数组,此时,同样的 DOM 元素存在两个引用:一个在 DOM 树中,另一个在字典中。那么将来需要把两个引用都清除
- 解决方法
- DOM树、字典或者数组同时要删除
- 闭包