文档章节

闭包

百里求一
 百里求一
发布于 2016/04/11 16:11
字数 339
阅读 10
收藏 0

闭包

标签(空格分隔): 闭包


在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。Peter J. Landin 在1964年将术语闭包定义为一种包含环境成分和控制成分的实体。

    我们来分析一下概念,首先闭包应该是一个函数(在groovy中至少也应该是一个代码块),其次该函数引用了,就是调用了环境中的自由变量。对于一个正常的函数来说,执行完毕后,超出函数本身的的变量都会被销毁,而闭包不会。

##用计数器举例来说吧

//Groovy的闭包
def get_count(_count=0){
    def count = _count
    return { count += 1;return count }
}
//首先get_count中的自由变量count被代码块`{ count += 1;return count }`引用,所以该函数就是一个闭包
count = get_count(1)
println count()
println count()
def get_count(_count=0):
    count = _count
    def _wrap_count():
        count += 1
        return count
    return _wrap_count
    
count = get_count(1)
print count()
print count()
function get_count(_count){
    let count = _count;
    return function(){
        count += 1;
        return count
    }
}
count = get_count(1)
console.log(count())
console.log(count())

闭包图

© 著作权归作者所有

百里求一
粉丝 0
博文 29
码字总数 2218
作品 0
普陀
程序员
私信 提问

暂无文章

巨杉Tech | Hbase迁移至SequoiaDB 实战

背景 在传统银行 IT 架构中,联机交易与统计分析系统往往采用不同的技术与物理设备,通过定期执行的 ETL 将联机交易数据向分析系统中迁移。而作为数据服务资源池,同一份数据可能被不同类型的...

巨杉数据库
31分钟前
5
0
关于快速开发框架:网红妹纸,给了我一个idea!

我是一名软件公司的员工,从事撸码事业也有一段时间了。码代码已经成为我生活的一部分,我的撸码的生活几乎一成不变。直到有一天,写字楼搬来了一家网络红公司! 网红公司,什么是网红公司,...

我想造火箭
33分钟前
8
0
Java操作栈-表达式求值

package stack.demo;import java.io.IOException;import java.util.Scanner;import java.util.Stack;/** * 表达式求值 算符优先法 * 3*(5-2)# #在这里表示结尾 * ...

FeanLau
43分钟前
5
0
Java内功心法,Set集合的详解

本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门:https://mp.weixin.qq.com/s/Jzdd...

李红欧巴
45分钟前
23
0
微博 2 亿日活背后,广告系统不掉线的全景运维大法

https://www.infoq.cn/article/wfHffPqV2f4Y5M1y6Mf2

perofu
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部