闭包的产生及作用

闭包

生成条件:当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。

内存泄漏就是内存占用,内存被占用的越多,内存就变得越来越少了,就像内存被泄露了一样
例如:
闭包的产生及作用
答案为123,因为没有 b();此时 b 还是被定义的状态,和 a 执行的状态是一样的。functiona(){}是在 return b 之后才执行完,才销毁。return b 让 a 执行时的 AO 被保存在外面。
闭包的产生及作用
return b 是把 b(包括 a 的 AO)保存到外部了(放在全局)
当 a 执行完砍掉自己的 AO 时,b 依然可以访问到 a 的 AO(因为 return b)。
闭包的产生及作用
执行过程:
先执行 function a(){ var aa = 345;function b (){}b();}
想要执行完上面的 b();就需要执行完 function b(){var bb = 234; function c(){}c();},
想要执行 c();就要先执行完 function c(){var cc =123;},
b();是一个复合语句,执行完 b 里面的每一句话,才能执行 b();
销毁顺序:
哪个先被执行完,哪个先被销毁
当 c 执行完,先销毁 c 自己的执行期的上下文,
当 c();执行完,那么 b 也执行完了,就销毁 b 的执行期上下文;
当 b();执行完,那么 a 也执行完了,就销毁 a 的执行期上下文

闭包的作用

1、实现公有变量

每回调用函数就会在原有基础上加一次,函数累加器

2、可以做缓存(存储结构)

缓存是外部不可见的,但是确实有存储结构

3、可以实现封装,属性私有化

4、模块化开发,防止污染全局变量