Dart - 匿名函数

Dart - 匿名函数 首页 / Dart入门教程 / Dart - 匿名函数

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

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

(parameter_list) {
   statement(s)
}

让我们考虑以下例子。

void main() { 
  var list = ["James","Patrick","Mathew","Learnfk"];
  print("Example of anonymous function");
  list.forEach((item) {
      print('${list.indexOf(item)}: $item');
});
}

输出:

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

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

如果函数由一个语句组成,那么我们还可以通过以下方式编写以上代码。

list.forEach(
(item) => print("${list.indexOf(item)}: $item"));

作用域

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

bool topVariable = true;

void main() {
  var inside_Main = true;
//定义嵌套函数
 
 void myFunction() {
    var inside_Function = true;
   
 void nestedFunction() {
      var inside_NestedFunction = true;
     //该函数正在使用以前函数的所有变量。
      assert(topVariable);
      assert(inside_Main);
      assert(inside_Function);
      assert(inside_NestedFunction);
    }
  }
}

闭包

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

void main() {
 String initial() {
     var name = 'Will Smith';//名称是由init创建的局部变量
  
     void disp_Name() {//displayName()是内部函数,一个闭包
           print(name);//使用在父函数中声明的变量
     }
     disp_Name();
}
init();

输出

Will Smith

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

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

代码精进之路 -〔范学雷〕

OpenResty从入门到实战 -〔温铭〕

TypeScript开发实战 -〔梁宵〕

即时消息技术剖析与实战 -〔袁武林〕

Service Mesh实战 -〔马若飞〕

用户体验设计实战课 -〔相辉〕

高楼的性能工程实战课 -〔高楼〕

Web漏洞挖掘实战 -〔王昊天〕

互联网人的数字化企业生存指南 -〔沈欣〕

好记忆不如烂笔头。留下您的足迹吧 :)