每个函数都是闭包吗?

Nov*_*tor 5 closures

只是想知道,因为闭包是一个函数,它在定义之外引用了变量/方法。每个函数都关闭程序的全局变量(基本上在每种主流语言中,无论是 javascript/python/c/c+/什么)。那么,因此,每个函数都是一个闭包?

编辑:让我再次强调,我不仅在谈论 javascript 中的闭包,而且在更一般的上下文中

T.J*_*der 5

对,就是这样。正如您所确定的,JavaScript 中的每个函数都是至少一个上下文的闭包:全局上下文。这就是全局变量在 JavaScript 中工作的方式/原因。

我们通常不它们为闭包,除非它们在某些其他上下文中关闭并且实际上利用了它们这样做的事实,但是您说得对,在技术层面上,它们都是。


每个函数都关闭程序的全局变量(基本上在每种主流语言中,无论是 javascript/c/c+/什么)。

我不会一概而论,不。不同的语言有不同的实现全局变量的方式。这些语言中的函数是否都是“闭包”可能是有争议的,所以我将上面的答案限制在 JavaScript 上。


geo*_*org 3

闭包是一个引用其定义之外的变量/方法的函数

不,这是一个“带有自由变量的函数”,而不是“闭包”。

引用维基百科

...只有当超出非局部变量的范围时,闭包才与具有自由变量的函数不同,否则定义环境和执行环境一致,并且没有什么可以区分它们(静态和动态绑定不能区分,因为名称解析为相同的值)。

换句话说,在某些上下文中,闭包是对绑定来自另一个上下文的变量的函数的引用。否则,称其为“闭包”就没有意义了。