首页 > 代码库 > 浅谈闭包(Closure)
浅谈闭包(Closure)
一、闭包
好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识。今天查看了一下维基百科,顺便写下来。
二、闭包的定义
在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范围内命名变量 绑定到语言的一类对象-------函数。操作上,一个闭包就是一条存储着 函数和其环境变量 的记录:映射着 函数的变量(变量在本地使用,但是在闭包环境中定义) 和 值或者引用(其名称在闭包创建时就进行绑定)。一个闭包(和普通函数不一样)允许函数访问 其引用的变量(通过闭包拷贝其值和应用),甚至当函数在其范围以外调用。
三、样例
下面的程序代码片定义了一个高阶函数----startAt(x) 和其嵌套函数------incrementBy(y)。嵌套函数incrementBy在其内部可以访问x,尽管x变量不是本地定义,但是其在x的词法范围内。函数startAt(x)返回的是闭包,包含一份x的 值 或 其在startAt调用中x的引用 的拷贝,函数 incrementBy()的内容的拷贝
function startAt(x) function incrementBy(y) return x + y return incrementByvariable closure1 = startAt(1)variable closure2 = startAt(5)
注意:由于startAt()返回的是一个函数,所以上述例子closure1 和 closure2 也是函数类型的,可以像函数一样使用。虽然他们返回都是相同的函数incrementBy,但是其相关联的环境不同。
浅谈闭包(Closure)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。