关闭因为它能做什么或因为它做什么

hco*_*bda 15 closures functional-programming

好吧,这是一个迂腐的问题,但我想确保我正确理解这个定义.使用封闭的绰号来形容匿名函数可以解除在局部范围内的变量(无论他们实际上做还是不做)或者只有当他们解除局部范围内的变量?

换句话说,如果一个匿名函数能够在其局部范围内提升变量(因为语言提供了这种能力)但是没有,它仍然被认为是一个闭包吗?

我的理解是,只有当局部变量被解除时,它才是闭包.但是一个没有的匿名函数(尽管它可以)不是一个闭包.因此,并非所有匿名函数都是闭包,但所有闭包都是匿名函数.

再次,抱怨迂腐,但这些东西啃着我.:)

die*_*dha 28

假设你的意思是在计算机科学的背景下......

闭包是一个第一类函数,它捕获自定义环境中自由变量的词法绑定.一旦它捕获了词法绑定,该函数就变成了一个闭包,因为它"关闭"了那些变量.

请注意,这意味着闭包仅在运行时存在.

对于函数来说,闭包是与匿名或命名的函数正交.您可以创建一种语言,允许您将命名函数定义为闭包.

这是Python中的"命名"闭包:

def maker():
  count=[0]
  def counter():
    count[0]=count[0]+1
    return count[0]
  return counter
Run Code Online (Sandbox Code Playgroud)


小智 6

lua.org中定义了闭包的一个很好的定义:

当一个函数被编写为包含在另一个函数中时,它可以完全访问封闭函数中的局部变量;此功能称为词法作用域。尽管这听起来很明显,但事实并非如此。词法作用域加上一等函数是编程语言中的一个强大概念,但很少有语言支持该概念。