美文网首页Dart
Dart - 函数(词法闭包、函数对象相等和返回值)

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

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

词法闭包

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

函数可以封闭定义到它作用域内的变量。接下来的示例中,函数 makeAdder()捕获了变量 addBy。无论函数在什么时候返回,它都可以使用捕获的addBy 变量。

/// 返回一个将 [addBy] 添加到该函数参数的函数。
/// Returns a function that adds [addBy] to the
/// function's argument.
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

void main() {
  // 生成加 2 的函数。
  var add2 = makeAdder(2);

  // 生成加 4 的函数。
  var add4 = makeAdder(4);

  assert(add2(3) == 5);
  assert(add4(3) == 7);
}

支持多个括号的连续调用:

Function generateFunc(int i){
    return (item)=> item+i;
  }
  
  var func = generateFunc(100);
  print(generateFunc(100)(10000));

测试函数是否相等

函数既然是对象,也可以比较是否相等:

void foo() {} // 定义顶层函数 (A top-level function)

class A {
  static void bar() {} // 定义静态方法
  void baz() {} // 定义实例方法
}

void main() {
  var x;

  // 比较顶层函数是否相等。
  x = foo;
  assert(foo == x);//true

  // 比较静态方法是否相等。
  x = A.bar;
  assert(A.bar == x);//true

  // 比较实例方法是否相等。
  var v = A(); // A 的实例 #1
  var w = A(); // A 的实例 #2
  var y = w;
  x = w.baz;

  // 这两个闭包引用了相同的实例对象,因此它们相等。
  assert(y.baz == x);//true

  // 这两个闭包引用了不同的实例对象,因此它们不相等。
  assert(v.baz != w.baz);//true
}

返回值

所有的函数都有返回值。没有显示返回语句的函数最后一行默认为执行 return null。

foo() {}

assert(foo() == null);

相关文章

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

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

  • Dart语法(下)

    前文链接: Dart简介 Dart语法(上) 内容: 函数(方法)函数定义及各类函数;函数参数;闭包 面向对象定义...

  • 函数对象和闭包

    函数对象和闭包 一) 函数对象 示例: 二)函数嵌套 三)闭包函数

  • JS高级学习:函数

    案例 函数作为返回值 案例2: 闭包 闭包的优缺点:缓存数据 函数模式的闭包:在一个函数中有一个函数 对象模式的闭...

  • JS 闭包

    闭包 mdn上定义是:函数和声明该函数的词法环境的组合。 维基定义是:闭包 词法闭包(Lexical Closur...

  • 带你Dart带你飞之Functions

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

  • 关于闭包

    闭包的英文是closure,又称词法闭包(Lexical Closure)和函数闭包(Function Closu...

  • 闭包笔记

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

  • Python笔记四 装饰器

    装饰器 = 高阶函数+函数嵌套+闭包 高阶函数 = 参数 or 返回值为函数 函数嵌套 = 在函数中定义函数 闭包...

  • 闭包

    闭包 闭包是什么? 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行,简单...

网友评论

    本文标题:Dart - 函数(词法闭包、函数对象相等和返回值)

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