JavaScript 关于垃圾回收器和闭包的关系

JavaScript 关于垃圾回收器和闭包的关系

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

你可以从这里阅读 闭包

垃圾回收器和JavaScript中闭包的关系: 在JavaScript中使用闭包的最大缺点是会过度消耗内存,并且闭包中不需要的闭合变量 不会被回收 ,从而导致 内存泄漏

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

Javascript

<script> 
    function a() { 
        var x = 10; 
      
        return function b() { 
            console.log(x); 
        } 
    } 
      
    var y = a(); 
    y(); 
</script>

输出:

10

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

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

Javascript

<script> 
    function a() { 
        var x = 10, 
            z = 92; 
      
        return function b() { 
            console.log(x); 
        } 
    } 
      
    var y = a(); 
    y(); 
      
    console.log(z); 
</script>

输出:

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程