码迷,mamicode.com
首页 > 其他好文 > 详细

我理解的闭包

时间:2017-11-26 15:58:30      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:get   func   一点   解决   问题:   全局变量   问题   外部   释放   

以下只是个人的一些见解

问题:什么是闭包,为什么会有闭包,闭包有什么作用。

1、什么是闭包:闭包,就是在函数1里面声明一个函数2,并在函数1中返回一个函数2,,使在函数1外面可以通过函数2来使用函数1的局部变量。

2、为什么会有闭包:认识闭包之前,我们必须了解变量(全局变量和局部变量)。在一个函数里定义一个局部变量,在函数外部是无法使用的,但是有时候特殊的需求使我们需要使用这个局部变量,那我们怎么办,闭包应运而生。有点类似于Java中的封装,给你一个公共的接口来使用我类内部的属性和方法(get()和 set())。

3、闭包的作用:第二个问题其实只是说了闭包的其中一个作用。闭包还有另外的作用,就是让函数1里的变量一直存在于内存中,为什么呢,因为垃圾回收机制(garbage collection)会自动的回收、销毁我们已经使用过的变量啊函数啊什么的。而我们的闭包,就可以一定程度的避免这种情况。如果我们调用了函数1,那函数1里的局部变量就会被垃圾回收机制给回收掉,内存中找不到了,但是呢,因为函数2依赖于函数1,所以函数1的变量就不会被回收。引用别人的一句话就是:当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们。想走,但是被别人拉着走不掉那种感觉。

注意事项:

1> 为什么会有垃圾回收机制呢,为了释放资源,节约内存。但是闭包的话,该释放掉的内存无法释放,资源一直被占用,所以闭包是十分的消耗内存 的,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2> 还有一点就是,函数1里定义局部变量,为什么定义局部变量呢,因为不想外部也可以随便的对他进行操作嘛,但是如果使用了闭包,你就可以在函数外部对其内的局部变量进行修改,所以,不要随便修改函数1内部的变量值

另外:JavaScript中所有的function都是一个闭包

 

我理解的闭包

标签:get   func   一点   解决   问题:   全局变量   问题   外部   释放   

原文地址:http://www.cnblogs.com/GuiZai/p/7898968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!