Mickey's Blog ·

闭包-‘函数模板’

闭包这个概念不是某个语言独有的,而是一种机制,百度词条的解释是

闭包就是能够读取其他函数内部变量的函数。

常见的闭包是我们前端语言的js,如果你在函数内返回了匿名函数,并且这个匿名函数使用了函数内部的变量

image.png

此时我们执行outer(),执行结束后a变量并不会释放,因为inner还在引用他,并且可以通过执行inner继续和a交互。

相当于在对象或者函数内部,用不同语言自己的方式保存了“现场”,可以在之后继续对“现场”里的内容进行访问,这样也是有缺点的

《JavaScript高级编程》书中建议:由于闭包会携带包含它的函数的作用域,因为会比其他函数占用更多内容,过度使用闭包,会导致内存占用过多。

同时闭包函数在js中还有其他可能产生的问题:

1 首先就是引用“现场”里的内容,这个内容是会改变的

image.png

这个例子中返回的就是10,10,10,10...而不是简单的预期123456...,由于循环结束才是最终“现场”的状态,所以想要保留过程中的状态,需要返回过程中的闭包。

image.png

2 同时还有闭包执行时可能和声明时具备不同德this指向

image.png

3 闭包也需要更多关注内存引用问题

image.png

但问题虽然很多,闭包却可以给我们提供很多功能,闭包的使用场景我们在下一篇讲解

部分内容原文 :https://www.cnblogs.com/sandaizi/p/11582488.html