回答

  1. JS 具有自动垃圾回收机制,周期性执行,找出那些不再继续使用的变量,然后释放其内存。
  2. JS 的垃圾回收策略,从引用计数到标记清除。
    1. 引用计数,把「变量是否需要使用」简化为「变量是否被其他变量引用」,没有引用了则回收掉。这样带来的问题是:循环引用后无法被回收。
    2. 标记清除,把「变量是否需要使用」简化为「变量是否可到达」,不可到达则被回收掉。
  3. 不同 JS 引擎的实现方式不同,针对标记清除算法的优化也不同。比如常见的 V8 引擎,采用了「分代回收」的优化策略。
  4. 在开发中,要避免内存泄漏,需要注意的点是:不用全局变量,注意清除定时器等。

    具体分析

    参考资料

  5. 内存管理 - JavaScript | MDN [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management]

  6. 一文搞懂V8引擎的垃圾回收 [https://juejin.im/post/6844904016325902344]