闭包

1.闭包是如何产生的

我们先来看一个小例子:

example

我们在var a = 1的这行打上断点,在浏览器中可以发现闭包产生了

closure

那么闭包是怎么产生的呢?

我们可以在fn函数的var a =1;下面再加一条var b =2,再观察浏览器,发现闭包里并没有b

所以闭包产生的条件是:

当一个嵌套函数的内部函数引用了嵌套函数的外部函数的变量(函数)时,闭包就产生了


2.闭包到底是什么?

我们可以通过谷歌浏览器debug调试的方式查看闭包

对于闭包可以有两种理解

1.闭包是嵌套的内部函数


理解一


2.闭包是嵌套函数的内部函数中包含被引用变量(函数)的那个对象


理解二


3.闭包产生的条件

1.函数嵌套

2.内部函数引用了外部函数的的数据


4.闭包常见的使用案例

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


闭包的使用1

2.将函数实参传递给另一个函数调用


闭包的使用2

3.定义js模块


js模块


调用这个模块的方法

5.闭包的作用

1.使函数内部的变量在函数执行完后仍能存活在内存中(延长了局部变量的生命周期)

2.让函数外部可以操作到函数内部数据


6.闭包的生命周期

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

2.死亡:在嵌套的内部函数成为垃圾对象时


闭包的生命周期

7.闭包的缺点

1.函数执行完后,函数内的局部变量没有释放,占用内存时间会变长(是优点也可能是缺点)

2.容易造成内存泄露(内存泄漏也就是占用的内存没有及时释放,闭包,意外的全局变量,没有及时清理的计时器或者回调函数都会导致内存泄漏,内存泄漏积累多了就会使当前程序需要的运行内存超出剩余的运行内存,从而导致内存溢出)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。