闭包的产生条件:一个嵌套的内部函数(子)引用外部函数(父)的变量,外部函数一被调用,就会就产生了闭包
闭包的理解:
一、闭包是嵌套的内部函数(大部分人这样认为,也就是下面例子中的fun2)
二、闭包是包含了引用变量的对象(更加准确,下面例子fun2中一个Closure对象)
注意:闭包存在于嵌套的内部函数中。
常见的闭包:
一、将一个函数作为另外一个函数的
二、将函数作为实参传递给另外一个函数调用
如果不存在闭包,那么上面两个函数在执行时都会报错,因为内部的变量在函数执行完毕后被销毁
闭包的作用:
一、使函数内部的变量在函数执行完毕后,任然存活在内存中(延长局部变量的生命周期)
二、让函数外部可以操作(读写)到函数内部的数据(变量/函数)
问题:1.函数执行完后,函数内部声明的局部变量是否还存在?一般是不存在的,存在于闭包中的局部变量才了能存在
2.在函数的外部能直接访问函数内部的局部变量吗?不能,但是我们可以通过闭包让外部操作它
闭包的生命周期:
1.产生:在嵌套内部函数定义执行完时就产生了(不是在调用)
2.死亡:在嵌套的内部成为垃圾对象时
闭包的应用:定义js模块
*具有特定功能的js模块
*将所有的数据和功能都封装在一个函数内部
*只像外部暴露一个包含n个方法的对象或者函数
*模块的使用者只要通过模块暴露的对象调用方法来实现对应的功能
原文:https://www.cnblogs.com/lzyyyyy/p/13381037.html