JS闭包

基本概念

如果一个函数引用了父级及父级以上的作用域的变量,那么这个函数就是一个闭包函数。

实现闭包的最常用方法就是函数嵌套,如

function foo() {
    var a = 1
    return funtion() {
        a = a + 1
    }
}

闭包的特点

  1. 被闭包函数访问的父级及以上的变量,会一直存在于内存中,不会被JS的垃圾回收机制回收。
  2. 闭包实现了对其他函数内部变量的访问。(函数内部的变量对外是不能访问的,闭包通过这种变通的方法实现了访问)

JS的垃圾回收机制

  • 如果一个对象不再被引用,那么这个对象就会被GC回收。
  • 如果两个对象相互引用,而不再被第三者引用,那么这两个对象都会被回收。

闭包的应用场景

  • 封装私有变量
  • 缓存变量,如节流防抖函数
  • 模拟块级作用域
  • 创建模块