1、创建变量(对象、字符串等)时自动分配内存,在不使用时自动释放,这个过程称为垃圾回收。
    2、内存的生命周期:
    分配内存
    开始使用内存(进行读写操作)
    不再使用时释放内存
    3、JavaScript的内存分配
    值的初始化
    在定义变量时分配内存

    1. var n = 123; // 给数值变量分配内存
    2. var s = "azerty"; // 给字符串分配内存
    3. var o = {
    4. a: 1,
    5. b: null
    6. }; // 给对象及其包含的值分配内存
    7. // 给数组及其包含的值分配内存(就像对象一样)
    8. var a = [1, null, "abra"];
    9. function f(a){
    10. return a + 2;
    11. } // 给函数(可调用的对象)分配内存
    12. // 函数表达式也能分配一个对象
    13. s
    14. someElement.addEventListener('click', function(){
    15. someElement.style.backgroundColor = 'blue';
    16. }, false);

    函数调用分配内存
    通过调用结果分配:

    1. var d = new Date(); // 分配一个 Date 对象
    2. var e = document.createElement('div'); // 分配一个 DOM 元素
    3. 函数调用分配新变量或新对象
    4. var s = "azerty";
    5. var s2 = s.substr(0, 3); // s2 是一个新的字符串
    6. // 因为字符串是不变量,
    7. // JavaScript 可能决定不分配内存,
    8. // 只是存储了 [0-3] 的范围。
    9. var a = ["ouais ouais", "nan nan"];
    10. var a2 = ["generation", "nan nan"];
    11. var a3 = a.concat(a2);
    12. // 新数组有四个元素,是 a 连接 a2 的结果

    4、两种垃圾回收机制:
    引用计数垃圾收集: 将对象是否不再需要 简化定义为 此对象有没有其他对象引用到它
    标记-清除算法: 将对象是否不再需要,简化定义为 对象是否可以获得(从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不可获得的对象)