Dart在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
显示目录

词法闭包



词法闭包

闭包 就是一个函数对象,就算函数对象的调用在它原始作用域之外, 依然可以访问在它词法作用域内的变量。

函数可以封闭定义到它作用域内的变量。 下面示例中, makeAdder() 捕获了变量 addBy。 不论何时执行返回函数,函数都会使用捕获的 addBy 变量。

/// 返回一个函数,返回的函数参数与 [addBy] 相加。
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);
}

测试函数是否相等 下面是顶级函数,静态方法和示例方法相等性的测试示例:


void foo() {} // 顶级函数

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

void main() {
  var x;

  // 比较顶级函数。
  x = foo;
  assert(foo == x);

  // 比较静态方法。
  x = A.bar;
  assert(A.bar == x);

  // 比较实例方法。
  var v = A(); // A的1号实例
  var w = A(); // A的2号实例
  var y = w;
  x = w.baz;

  // 两个闭包引用的同一实例(2号),
  // 所以它们相等。
  assert(y.baz == x);

  // 两个闭包引用的非同一个实例,
  // 所以它们不相等。
  assert(v.baz != w.baz);
}
由JSRUN为你提供的Dart在线运行、在线编译工具
        JSRUN提供的Dart 在线运行,Dart 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。