'垃圾回收机制'和'闭包'

84 阅读2分钟

什么是垃圾回收机制

一个程序不再使用的内存,被js引擎'自动回收';如果不能回收就叫内存泄漏.

内存的生命周期, 创建,使用,销毁.

内存的创建:(声明一个变量,对象,函数)----都会在内存上开辟一个空间

内存的使用 对于遍历的一些操作,累加求和,获取dom元素.并修改属性等等

内存的回收 不再使用的遍历,会被js引擎自动回收(全局变量是关闭页面才会销毁,函数里面的变量,在函数调用完毕以后,自动销毁)

垃圾回收机制的算法

两个算法(引用计数法和标记清除法)

第一个:引用计数法:一个值不再被引用(引用次数为0),那么这个值就会被清除,内存就会被自动回收

第二个:标记清除法:从顶级对象去查找某个变量,如果找不到,就标记这个变量,然后清除

(为什么还会出现第二种计数法:因为 引用计数法,有一些循环引用的问题)

-会导致内存泄漏.所以现在浏览器主流都是 标记清除法

闭包的概念

什么是闭包 内层函数+访问了外层函数的变量 ----闭包就是函数(必须有两个条件)

 // 全局作用域下面的函数 --- 全局函数
    function f() {
      // 函数f内的局部变量
      const num = 10
      // 内层函数
      function g() {
        // 在函数g的内部访问外层函数的变量num --- 为什么能访问到?
        console.log(num);
      }
      g()
    }
    f()

闭包的使用场景

在函数外面访问函数内部的变量

function f(){
      const num = 10;
      // 这个函数的返回值是一个函数
      return function(){
        console.log(num);
      }
    }

    // const res = function() {
    //   console.log(num);
    // }
    const res = f() // 将函数f的返回值,赋值给变量res,值就是一个函数
    // 函数是可以加小括号调用的
    res()

闭包的应用

总结 1.闭包就是函数 内层函数调用外层函数的变量形成闭包 2.闭包 可以让外面的函数 通过函数调用的方式 访问函数内部的变量 3.数据私有化