functional-programming - 关闭因为它可以做什么或因为它做了

标签 functional-programming closures

好的,这是一个有点迂腐的问题,但我想确保我正确理解了这个定义。 是用来描述匿名函数的闭包名字对象吗?可以提升局部范围内的变量(无论它们是否真的这样做)或仅当它们 提升局部范围内的变量?

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

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

再一次,为迂腐感到抱歉,但这些东西在啃我。 :)

最佳答案

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

闭包是第一类函数,它在其定义环境中捕获自由变量的词法绑定(bind)。一旦它捕获了词法绑定(bind),该函数就变成了一个闭包,因为它“关闭”了这些变量。

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

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

这是 Python 中的“命名”闭包:

def maker():
  count=[0]
  def counter():
    count[0]=count[0]+1
    return count[0]
  return counter

关于functional-programming - 关闭因为它可以做什么或因为它做了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103750/

相关文章:

lambda - 如何在保留捕获的变量的同时更改 lambda 中的代码?

scala - Scala 中 2 个集合的叉积

swift - swift 中的功能类型注释

haskell - 通过对 Haskell 中二元函数的两个参数进行某种转换来实现 "lift up"的最惯用方法是什么?

python - Python 的闭包是如何工作的

c# - 如何在C#中为变量创建闭包?

javascript - 一个叫做 struggle 的高阶函数怎么样?

javascript - 作为参数发送给其他函数的函数

javascript - 在 javascript for 循环中使用匿名函数

javascript - 一系列的 promise