是否可以在没有闭包的情况下拥有嵌套函数?

Is it possible to have nested functions without closures?

提问人:wrongbyte 提问时间:9/28/2022 更新时间:9/29/2022 访问量:92

问:

到目前为止,我对闭包的理解是,它们将“开放”函数与周围的范围结合在一起,本质上使它们成为闭合表达式。

我已经看过几个如何在 Javascript 中实现的例子,其中大多数使用嵌套函数来创建外部和内部范围,并展示该语言如何为内部函数创建周围范围的“快照”。

但是,我知道有些语言没有实现闭包,例如 C。在这种特殊情况下,也没有对嵌套函数的(原生)支持,因此似乎不可能从 JavaScript 复制“内部”和“外部”情况 - 据我所知,因此,没有闭包不会成为一个重要问题。

但是,一种语言是否有可能具有嵌套函数并且仍然没有闭包?还是一个暗示另一个?

闭包与 语言无关的语言 设计

评论

1赞 Branco Medeiros 9/28/2022
Pascal 有嵌套函数,我不认为它有闭包。我相信 Pascal 中的嵌套函数共享堆栈框架。这意味着他们无法“超越”封闭功能。

答:

0赞 Nithish kumar Thiruchelvam 9/28/2022 #1

这是在 javascript 中发挥作用域概念的区域......如您所知,在 Java 中,我们主要使用类组件,然后我们使用继承来实现父级功能,但 JavaScript 是一种奇怪的语言......因此,我们无法实现没有嵌套函数的闭包

1赞 Matt Timmermans 9/29/2022 #2

只有当函数可以从声明它的作用域之外执行时,“闭包”的概念才有意义。

在没有第一类函数的语言中,即函数不能传递或分配给变量,你仍然可以有嵌套函数,但它们不能用作闭包。