Dart 匿名函数

2025年3月17日 | 阅读 3 分钟

我们已经学习了 Dart 函数,它通过使用用户定义的名称来定义。 Dart 还提供了指定无名函数或没有名称的函数的功能。 这种类型的函数被称为匿名函数、lambda 或闭包。 匿名函数的行为与常规函数相同,但它没有名称。 它可以有零个或任意数量的参数,并带有可选的类型注释。

我们可以将匿名函数分配给一个变量,然后我们可以根据我们的要求检索或访问闭包的值。

匿名函数包含一个独立的代码块,可以在我们的代码中作为函数参数传递。 语法如下。

语法

让我们看以下示例。

示例 -

输出

Example of anonymous function
0: James
1: Patrick
2: Mathew
3: Tom

说明

在上面的例子中,我们定义了一个带有未类型化参数 item 的匿名函数。 该函数为列表中的每个项目调用,并使用其指定的索引值打印字符串。

如果函数由一条语句组成,那么我们也可以用以下方式编写上面的代码。

它等同于之前的代码。 您可以在您的 dart pad 中粘贴并运行它来验证它。

词法作用域

正如我们在Dart简介中讨论的那样,它是一种词法作用域语言,这意味着变量的作用域是在编译时决定的。 变量的作用域是在编译代码时确定的。 如果变量定义在不同的花括号中,它们的行为会有所不同。 让我们理解以下示例。

示例 -

观察上面的代码,nestedFunction() 使用了上一个函数的变量。

词法闭包

词法闭包,也称为闭包,是一个函数对象,即使在使用该函数时,也可以访问其词法作用域中的变量。 换句话说,它提供了从内部函数访问外部函数的作用域。 让我们理解以下示例。

示例 -

输出

Will Smith

说明

在上面的代码中,initial() 函数创建了一个名为 name 的局部变量和函数 disp_Name()disp_Name() 函数在 initial() 函数中定义,因此 disp_Name() 函数没有自己的局部变量。

内部函数可以访问外部函数的变量。 函数 disp_Name() 可以访问在外部函数 initial() 中声明的 name 变量。


下一主题main() 函数