闭包

105 阅读1分钟

闭包是什么

所谓的闭包是一个引用关系,该引用关系存在于内部函数中,引用的是外部函数的变量的对象。 简单的说:假如一个函数能访问外部的变量,那么就形成了一个闭包,而不是一定要返回一个函数

let a = 1
// 产生闭包
function fn() {
  console.log(a);
}

function fn1() {
  let a = 1
  // 产生闭包
  return () => {
    console.log(a);
  }
}
const fn2 = fn1()
fn2()

实例

总结:本质就是上级作用域内变量的生命周期,因为被下级作用域内引用,而没有被释放。就导致上级作用域内的变量,等到下级作用域执行完以后才正常得到释放。

闭包产生条件

  • 函数嵌套
  • 内部函数引用外部函数的局部变量
  • 使用外部函数

常见的闭包

  • 将函数作为另一个函数的返回值
  • 将函数作为实参传递给另一个函数调用
  • 使用闭包实现私有方法操作独立的私有属性

闭包的作用

  • 延长外部函数变量对象的声明周期
  • 让函数外部可以操作(读写)到函数内部的数据(变量/函数)
  • 注意: 浏览器为了性能后期将外部函数中不被内部函数使用的变量清除了

闭包的声明周期

  • 产生: 在嵌套内部函数定义执行完时就产生了(不是在调用)
  • 死亡: 在嵌套的内部函数成为垃圾对象时

底层原理

  • new了一份变量