您的位置:首页 > Web前端 > JavaScript

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

2017-05-27 22:31 543 查看
关于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.因为闭包会使得外部函数的变量始终曝露在内存中,应该注意尽量不要改变外部函数的变量值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: