只是想知道,因为闭包是一个函数,它引用了它之外的变量/方法的定义。 每个函数都关闭程序的全局变量(基本上在每种主流语言中,无论是javascript / python / c / c + /等等)。 那么,每个函数都是一个闭包吗?
编辑:让我再强调一下,我不是只讨论javascript中的闭包,而是在更一般的上下文中
答案 0 :(得分:3)
是的,确切地说。正如您所确定的,JavaScript中的每个函数都是至少一个上下文的闭包:全局上下文。这就是全局变量在JavaScript中的工作方式/原因。
我们通常不会调用他们关闭,除非他们关闭其他一些背景并实际利用他们这样做的事实,但你在技术层面上他们都是正确的,他们都是是
每个函数都关闭程序的全局变量(基本上在每种主流语言中,无论是javascript / c / c + /等等)。
我不会推广到那么远,没有。不同的语言有不同的方式来实现全局变量。这些语言中的函数是否都是“闭包”可能是有争议的,所以我将上面的答案限制在JavaScript之上。
答案 1 :(得分:3)
closure是一个函数,它引用了定义之外的变量/方法
不,这是一个“带有自由变量的函数”,而不是“闭包”。
...当非局部变量的范围之外,闭包只与具有自由变量的函数不同,否则定义环境和执行环境重合,没有什么可以区分这些(静态和动态绑定)无法区分,因为名称解析为相同的值)。
换句话说,在某些上下文中,闭包是对函数的引用,该函数绑定来自另一个上下文的变量。否则,将其称为“封闭”是没有意义的。