剖析js中的闭包,理解闭包到底是个什么,有怎样的作用
2017-05-27 22:31
543 查看
关于js中的闭包,网上的资料满天飞。虽然每个人对于闭包都有自己独特的见解,但是总体上来说对于闭包的实际理解是一致的,只是描述的方式有所不同。那么以怎样的方式可以让读者更加简单清楚理解闭包呢?这里本人做了一些工作,以一种简单的方式将闭包描述出来。
以上的代码片段就是一种闭包,我们在外部函数fun1()中定义了一个内部函数fun2(),并且在fun2()的内部使用了fun1()的变量,最后我们又把内部函数fun2()函数返回。结合我们对闭包的定义:
外部函数------------------------------------------------->fun1()
外部函数变量------------------------------------------->str
内部函数------------------------------------------------->fun2()
使用匿名函数作为内部函数返回是最常见的实现闭包的方式,这种方式和上面的方式相比更加的简单,更加容易理解。
2.使用闭包之后,外部函数的变量会始终存在与内存中,不会在外部函数调用后被GC回收。
2.因为闭包会使得外部函数的变量始终曝露在内存中,应该注意尽量不要改变外部函数的变量值。
1.闭包的概念
闭包就是定义在函数内部并且能够读取其他函数局部变量的函数。我们结合代码可以更好的理解<script type="text/javascript"> function fun1(){ var str="外部函数变量"; function fun2(){ console.log(str); } return fun2;//在fun1函数内部返回 } var result=fun1(); result(); </script>
以上的代码片段就是一种闭包,我们在外部函数fun1()中定义了一个内部函数fun2(),并且在fun2()的内部使用了fun1()的变量,最后我们又把内部函数fun2()函数返回。结合我们对闭包的定义:
外部函数------------------------------------------------->fun1()
外部函数变量------------------------------------------->str
内部函数------------------------------------------------->fun2()
2.闭包的常见写法
<script type="text/javascript"> function fun1(){ var str="外部函数变量"; return function(){ console.log(str); } } fun1()();
使用匿名函数作为内部函数返回是最常见的实现闭包的方式,这种方式和上面的方式相比更加的简单,更加容易理解。
3.闭包的作用
1.通过闭包我们可以在函数外部读取函数内部的变量,简单来说闭包就是将函数的外部和内部进行了连接。2.使用闭包之后,外部函数的变量会始终存在与内存中,不会在外部函数调用后被GC回收。
4.使用闭包应该注意的问题
1.因为闭包会使得函数的变量始终存在与内存中,所以会对内存造成很大的消耗,会造成网页的性能问题。并且在IE中还会造成内存泄漏的问题。2.因为闭包会使得外部函数的变量始终曝露在内存中,应该注意尽量不要改变外部函数的变量值。
相关文章推荐
- 深入理解闭包系列第一篇——到底什么才是闭包
- 深入理解JavaScript - 闭包 (一)到底什么才是闭包
- 闭包是什么?作用域垃圾回收机制混合理解闭包
- 自己的话理解什么是闭包,闭包的作用
- JS闭包作用及理解
- js作用域链和闭包的理解
- JS——到底什么才是闭包
- 深入理解闭包系列第一篇——到底什么才是闭包
- 什么是闭包?在js中的作用是什么?
- 深入理解js --作用域与闭包
- JS教程:词法作用域和闭包
- JS教程:词法作用域和闭包
- javascript深入理解js闭包
- [javascript] 深入理解js闭包
- java 的接口到底起什么作用
- AS3作用域规则–我对闭包(closure)的理解
- 纽约时报》:云计算到底指什么? (云计算的大众化理解)
- 到底什么是hash?它起什么作用?
- 什么叫DMZ区?DMZ区有什么作用?应该怎样构建DMZ?
- 什么叫DMZ区?DMZ区有什么作用?应该怎样构建DMZ?