Google I/O 2017上推出的新 GC 算法的原理是怎样的？
V8编译器有两个阶段：编译 和 执行 如果一次性解析和编译所有JS代码，会增加编译时间且影响代码执行速度，卡顿感严重，其次解析完成的字节码和编译以后 的机器代码都会存放内存中，内存相当宝贵，所以由于以上原因，JS虚拟机 实现惰性解析 举例：将函数的生命转换为函数对象，但并不解析和编译函数内部的代码，所以也不会生成抽象语法树 闭包的三个特征 总结： 所谓惰性解析是指解析器在解析的过程中，如果遇到函数声明，那么会跳过函数内部的代码，并不会为其生成 AST 和字节码，而仅仅生成顶层代码的 AST 和字节码。 利用惰性解析可以加速 JavaScript 代码的启动速度，如果要将所有的代码一次性解析编译完成，那么会大大增加用户的等待时间。 闭包会引用当前函数作用域之外的变量，所以当 V8 解析一个函数的时候，还需要判断该函数的内部函数是否引用了当前函数内部声明的变量，如果引用了，那么需要将该变量存放到堆中，即便当前函数执行结束之后，也不会释放该变量。