闭包
来源:互联网 发布:iphone qq tim 知乎 编辑:程序博客网 时间:2024/05/21 10:57
1.闭包的含义:
闭包就是能够读取其他函数内部变量的函数。
(1).闭包外层是一个函数。
(2).闭包内部都有函数。
(3).闭包会return内部函数。
(4).闭包返回的函数内部不能有return(因为这样就真的结束了)。
(5).执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在。
2.作用和原理:
因为闭包只有在被调用时才执行操作,所以它可以被用来定义控制结构。多个函数可以使用一个相同的环境,这使得它们可以通过改变那个环境相互交流。
闭包可以用来实现对象系统。
3.闭包的使用场景:
(1).采用函数引用方式的setTimeout调用。
(2).将函数关联到对象的实例方法。
(3).封装相关的功能集。
4.闭包的特性:
(1).作为函数变量的一个引用。当函数返回时,其处于激活状态。
(2).闭包就是当一个函数返回时,并没有释放资源的栈区。
5.闭包对页面的影响:
通过使用闭包,我们可以做很多事情,比如模拟面向对象的代码风格;更优雅、更简洁的表达出代码;在某些方面提升代码的执行效率。
6.闭包的好处和坏处:
闭包的好处:
(1).逻辑连续,当闭包作为另一个函数调用参数时,避免脱离当前逻辑而单独编写额外逻辑。
(2).方便调用上下文的局部变量。
(3).加强封装性,是第2点的延伸,可以达到对变量的保护作用。
闭包的坏处:
闭包有一个非常严重的问题,即浪费内存,浪费内存不仅仅因为它常驻内存,更重要的是,对闭包的使用不当会造成无效内存的产生。
7.一个闭包的简单实例:
function a(){ var i=0; function b(){ alert(++i); } return b;}var c=a();c();
这是个标准的闭包。在函数a中,定义了函数b,a又return了b的值。
var c=a();c();
这两句执行很重要。var c=a();在这里执行了a函数,那么a肯定经过了return,按照主流语言的函数特性,现在c的值就是a的返回值。第二行c()实际执行的就是b的函数。最后不管执行的是谁,会弹出一个值为0的窗口。到此为止,按理论来说所有的生命周期就算是全部结束了。可是如果我们再多执行一行var c=a();c();c();第一次弹出0,第二次弹出执行的却是1.也就是说第一次c()后,a中的i依然保留,所以a在内存中的栈区依然保留。
0 0
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 机器视觉-词袋模型Bag-of-words model
- Android源码目录结构概括
- 字符串添加equals方法
- chrome的APP模式与全屏模式 --app --kiosk
- DB2解决大数据量操作日志已满的问题
- 闭包
- Cookie和Session详解——博客地址
- Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple
- weblogic9 部署和JIDI配置 以及启动
- 【SQLSERVER】自定义函数:去零函数ClearZero
- Hololens 系列教程--开发环境搭建
- Redis安装和自启动配置
- 用GPIO模拟I2C操作
- swift 头像上传(3)头像保存与读取