美文网首页Dart
Dart - 函数(函数对象、匿名函数和词法作用域)

Dart - 函数(函数对象、匿名函数和词法作用域)

作者: LouisXWB | 来源:发表于2019-12-12 23:50 被阅读0次

函数作为一级对象

可以将函数作为参数传递给另一个函数。例如:

void printElement(int element) {
  print(element);
}

var list = [1, 2, 3];

// 将 printElement 函数作为参数传递。
list.forEach(printElement);

上述代码中,printElement 就是一个函数类Function 的对象, list.forEach 需要传入一个Function 对象。

void forEach(void f(E element)) {
    for (E element in this) f(element);
}

你也可以将函数赋值给一个变量,比如:

var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');

匿名函数

大多数方法都是有名字的,比如 main() 或 printElement()。你可以创建一个没有名字的方法,称之为 匿名函数,或Lambda表达式Closure闭包。你可以将匿名方法赋值给一个变量然后使用它,比如将该变量添加到集合或从中删除。

匿名方法看起来与命名方法类似,在括号之间可以定义参数,参数之间用逗号分割。

后面大括号中的内容则为函数体:
下面代码定义了只有一个参数 item 且没有参数类型的匿名方法。List 中的每个元素都会调用这个函数,打印元素位置和值的字符串:

var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});

如果函数体内只有一行语句,你可以使用箭头语法:

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

词法作用域

Dart 是词法有作用域语言,变量的作用域在写代码的时候就确定了,大括号内定义的变量只能在大括号内访问,与 Java 类似。
下面是一个嵌套函数中变量在多个作用域中的示例:

bool topLevel = true;

void main() {
  var insideMain = true;

  void myFunction() {
    var insideFunction = true;

    void nestedFunction() {
      var insideNestedFunction = true;

      assert(topLevel);
      assert(insideMain);
      assert(insideFunction);
      assert(insideNestedFunction);
    }
  }
}

nestedFunction() 函数可以访问包括顶层变量在内的所有的变量。


相关文章

  • Dart - 函数(函数对象、匿名函数和词法作用域)

    函数作为一级对象 可以将函数作为参数传递给另一个函数。例如: 上述代码中,printElement 就是一个函数类...

  • 带你Dart带你飞之Functions

    Functions(方法) 方法的参数入口函数一等方法对象匿名方法静态作用域词法闭包 Dart 是一个真正的面向对...

  • JS-函数

    1.定义(1)匿名函数(2)具名函数(3)箭头函数,无this 词法作用域(也叫静态作用域)JS看到上面的代码不是...

  • Dart - 函数(词法闭包、函数对象相等和返回值)

    词法闭包 闭包 即一个函数对象,即使函数对象的调用在它原始作用域之外,依然能够访问在它词法作用域内的变量。 函数可...

  • js作用域

    词法作用域 -js采用的是词法作用域,函数的作用域基于函数创建的位置。

  • JS专题: 函数

    函数声明 匿名函数 具名函数 箭头函数 词法作用域 我们有如下代码 对于上面的代码, 浏览器先把代码变成抽象语法树...

  • ES6--箭头函数

    箭头函数 解释 箭头函数就是个简写形式的函数表达式,并且它拥有词法作用域的this值。另箭头函数总是匿名的。 用法...

  • 匿名函数

    匿名函数:就是定义时未直接指定名称的函数 优点 节省内存空间 因为非匿名函数在定义时,就已经创建函数对象和作用域对...

  • 词法作用域&动态作用域

    词法作用域(静态作用域) 词法作用域也叫静态作用域,jsvascript为词法作用域。词法作用域关心的是你的函数申...

  • 闭包笔记

    闭包的定义 MDN 的定义: 闭包是函数和声明该函数的词法环境的组合。 词法作用域 参考作用域链: 函数在执行过程...

网友评论

    本文标题:Dart - 函数(函数对象、匿名函数和词法作用域)

    本文链接:https://www.haomeiwen.com/subject/swexnctx.html