我现在正在学习一门美丽的编程语言,Dart,我非常喜欢它。然而,我发现我的基本编程知识存在一些差距,其中之一是函数中的“闭包”,我发现它很难理解。你能给我解释一下匿名函数的独特之处吗?
最佳答案
“闭包”这个词可以用于许多不同的事物。
通常,最初,闭包是一个(函数)值,其中包含对变量的引用(它“关闭”这些变量)。
在 Dart 中,您可以通过两种不同的方式引入函数。
- 函数声明:
int foo(int x) => x;
(作为顶级静态 - 如果前缀为static
) >、实例或本地函数)。 - 函数表达式:
(int x) => x
(作为表达式)。
第一个函数是命名的,可以通过名称调用,直接引用声明(foo(42)
)。
也可以通过“撕掉”函数将其变成函数值:
int Function(int) f = foo;
函数表达式直接计算为函数值。
int Function(int) f = (int x) => x;
很多人对函数值使用“闭包”这个词,也称为“第一类函数值”,因为它们是像任何其他对象一样的对象,而不是只能以有限的方式使用。 如果您看到有人说“闭包”,请假设这就是他们的意思 - 一个对象,它也是一个函数。
从技术上讲,此处的函数值不会封闭任何变量。 这样做的一个例子是:
int Function(int) adder(int base) => (int addition) => base + addition;
int Function(int) add2 = adder(2);
这里存储在add2
变量中的函数值是函数表达式(intaddition)=>base+addition
的值。 base
变量不受此表达式的约束,而是由闭包/函数值捕获/“封闭”。此处关闭的 base
变量来自对值为 2
的 adder
的调用。
关于dart - 函数中的 'Closure'是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71048808/