📜  JavaScript 中垃圾收集器与闭包的关系

📅  最后修改于: 2022-05-13 01:56:47.151000             🧑  作者: Mango

JavaScript 中垃圾收集器与闭包的关系

垃圾收集器: JavaScript 引擎上浏览器中的一个程序可以冻结未使用的内存。在像 C/C++ 这样的编程语言中,我们通常决定如何获取内存、如何访问内存或如何分配或释放内存,这基本上取决于开发人员如何使用它。但是在像 JavaScript 这样的高级语言中,大部分工作都是使用 JavaScript 引擎完成的,因此有垃圾收集器可以从浏览器中获取未使用的内存。

你可以从这里阅读闭包

JavaScript 中垃圾收集器和闭包的关系:在 JavaScript中使用闭包的最大缺点是内存消耗过多,并且闭包下的封闭变量将来不需要的变量不会被垃圾收集,因此会发生内存泄漏

示例 1:以下示例涵盖了基本垃圾收集器的概念。

Javascript


Javascript


输出:

10

所以在上面的代码中,如果函数b 不存在并且不与 x 形成闭包,那么变量 x 将被垃圾收集。但是由于函数b 存在于函数a 内部并与变量 x 形成一个闭包,因此当函数b 返回时,变量 x 无法被垃圾收集。但是在现代 JavaScript v8 chrome 引擎中存在智能垃圾收集器的概念。

示例 2:以下示例涵盖了智能垃圾收集器的概念。

Javascript


输出:

10
Uncaught ReferenceError: z is not defined

这里变量 z 和变量 x 都与函数b闭包,但在函数b 中,没有对 z 进行任何操作,因此 z 是垃圾收集的,而 x 不是垃圾收集的。这就是垃圾收集和关闭的洞察关系。

参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#garbage_collection