1.闭包是如何产生的
我们先来看一个小例子:
我们在var a = 1的这行打上断点,在浏览器中可以发现闭包产生了
那么闭包是怎么产生的呢?
我们可以在fn函数的var a =1;下面再加一条var b =2,再观察浏览器,发现闭包里并没有b
所以闭包产生的条件是:
当一个嵌套函数的内部函数引用了嵌套函数的外部函数的变量(函数)时,闭包就产生了
2.闭包到底是什么?
我们可以通过谷歌浏览器debug调试的方式查看闭包
对于闭包可以有两种理解
1.闭包是嵌套的内部函数
2.闭包是嵌套函数的内部函数中包含被引用变量(函数)的那个对象
3.闭包产生的条件
1.函数嵌套
2.内部函数引用了外部函数的的数据
4.闭包常见的使用案例
1.将函数作为另一个函数的返回值
2.将函数实参传递给另一个函数调用
3.定义js模块
5.闭包的作用
1.使函数内部的变量在函数执行完后仍能存活在内存中(延长了局部变量的生命周期)
2.让函数外部可以操作到函数内部数据
6.闭包的生命周期
1.产生:在嵌套函数的内部函数定义执行完时就产生了(不是在调用时产生)
2.死亡:在嵌套的内部函数成为垃圾对象时
7.闭包的缺点
1.函数执行完后,函数内的局部变量没有释放,占用内存时间会变长(是优点也可能是缺点)
2.容易造成内存泄露(内存泄漏也就是占用的内存没有及时释放,闭包,意外的全局变量,没有及时清理的计时器或者回调函数都会导致内存泄漏,内存泄漏积累多了就会使当前程序需要的运行内存超出剩余的运行内存,从而导致内存溢出)