1.闭包:
当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露
注意:这里的内存泄露就是外层函数作用域不释放占用内存,所以剩的内存少 (闭包的缺点)
简单来说:两个函数互相嵌套或者多个函数互相嵌套,先说两个函数互相嵌套把内部函数保存到了外层函数的外部这种情况必然生产闭包,然后内部函数在外部执行的时候一定能够调用的了,原来它在的函数环境的变量。
案例:
此案例的结构是a函数内包括了b函数
a函数执行完的前一刻,a函数把b函数return保存在了外部,之后我们执行b函数,此时b的AO作用域是函数一起保存出来的,a的AO作用域并没有得到释放,被b函数保存,所以我们执行b的时候得到的aaa是a函数中的'123'
2. 闭包的作用 (好处)
1.实现公有变量
eg:函数累加器
普通函数写法:
使用闭包完成 优点(不用全局变量)
2.可以做缓存(存储结构)
eg:eater
注意:多个函数与一个函数i形成闭包时,他们之间的变量可以共用,因为保存的是同一个域
3.可以实现封装,属性私有化
eg:Person()
4.模块化开发,防止污染全局变量
3.闭包与立即执行函数的结合运用
先简单介绍一下立即执行函数
案例需求:使用原生js变量解决下面代码 为什么返回十个是10?
难点 :使用闭包解决闭包
十个10 的原因:因为我们在返回的前一刻for就已经是10了,则每次调用的内部的时候就都是10
解决方案:
解决方案:使用立即执行函数接收每一次for循环给出的i调用 返回的函数则是原来的立即执行函数的AO作用域。