剖析js中的闭包,理解闭包到底是个什么,有怎样的作用

Posted 考拉的墨尔本

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剖析js中的闭包,理解闭包到底是个什么,有怎样的作用相关的知识,希望对你有一定的参考价值。

关于js中的闭包,网上的资料满天飞。虽然每个人对于闭包都有自己独特的见解,但是总体上来说对于闭包的实际理解是一致的,只是描述的方式有所不同。那么以怎样的方式可以让读者更加简单清楚理解闭包呢?这里本人做了一些工作,以一种简单的方式将闭包描述出来。

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.因为闭包会使得外部函数的变量始终曝露在内存中,应该注意尽量不要改变外部函数的变量值。

以上是关于剖析js中的闭包,理解闭包到底是个什么,有怎样的作用的主要内容,如果未能解决你的问题,请参考以下文章

JS高级:闭包

深入理解闭包中的委托

深入理解JavaScript系列(16):闭包(Closures)

终于理解JS中的闭包了

JS闭包理解

深入理解javascript王福朋,厉害了word哥