好的,这是一个迂腐的问题,但我想确保我正确理解这个定义。闭包名字用于描述匿名函数, 可以 提升局部范围内的变量(无论它们是否实际执行)或仅当 执行时 在本地范围内解除变量?
换句话说,如果一个匿名函数具有 能力 来提升其局部范围内的变量(因为该语言提供了该功能)但是没有,它是否仍然存在被认为是关闭?
我的理解是,只有在解除局部变量时它才是闭包。但是一个没有的匿名函数(尽管它可以)不是一个闭包。因此,并非所有匿名函数都是闭包,但所有闭包都是匿名函数。
再一次,对于迂腐的对不起,但这些东西啃着我。 :)
答案 0 :(得分:27)
假设你的意思是在计算机科学的背景下......
闭包是一个第一类函数,它捕获自定义环境中自由变量的词法绑定。一旦它捕获了词法绑定,该函数就变成了一个闭包,因为它“关闭”了那些变量。
注意这意味着闭包仅在运行时存在。
对于函数来说,闭包是与匿名或命名的函数正交。您可以创建一种语言,允许您将命名函数定义为闭包。
这是Python中的“命名”闭包:
def maker():
count=[0]
def counter():
count[0]=count[0]+1
return count[0]
return counter
答案 1 :(得分:2)
这里定义了一个闭包的好定义: lua.org
当函数被包含在另一个函数中时,它可以完全访问封闭函数中的局部变量;此功能称为词法范围。虽然这听起来很明显,但事实并非如此。词法范围,加上一流的功能,是编程语言中一个强大的概念,但很少有语言支持这一概念。