闭包

115 阅读2分钟

是什么

闭包是嵌套的内部函数

是包含被引用变量(函数)的对象(正解)

注意:

闭包存在于嵌套的内部函数中

产生条件

+函数嵌套 +内部函数引用了外部函数的数据(变量/函数) +执行外部函数

  • 闭包在内部函数对象中,也就是说得先产生内部函数对象才会有产生闭包的可能;内部函数对象怎么产生:执行函数定义。执行调用外部函数才会执行函数定义,产生内部函数对象。执行函数定义不是执行函数,执行函数需要调用函数
  • 也就是说,产生内部函数对象不需要调用内部函数

常见的闭包

1.将函数作为另一个函数的返回值

image.png 说明 a 在不断累加,说明局部变量 a 没有消失 a 是个局部变量,什么时候产生:执行 fn1 时产生(即调用 fn1 时产生)。什么时候死亡:调用结束后就死亡。但实际上这个 a 可以不断累加,没有死亡

创建了几个闭包对象实际就是看外部函数调用了几次

2.将函数作为实参传递给另一个函数使用

image.png

闭包的作用:

1.使函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期)
2.让函数外部可以操作(读写)到函数内部的数据(变量/函数)

闭包的生命周期:

1.产生:在嵌套内部函数定义执行完时就产生了(不是在调用)

2.死亡:在嵌套的内部函数成为垃圾对象时 执行完函数定义,创建了内部函数对象就产生了。在第15行就可以说闭包已经存在了

image.png

闭包的应用_自定义JS模块:

闭包的缺点及解决:

1.缺点

+函数执行完后,函数内的局部变量没有释放,占用内存时间会变长

+容易造成内存泄漏

2.解决

+能不用闭包就不用闭包

+即使释放

  • 让内部函数成为垃圾对象,回收闭包