dart --- > 简单的闭包

首先得明白下面2点:

  1. 全局变量的特点:常驻内存,污染全局变量
  2. 局部变量的特点:会被垃圾回收机制回收,不会污染作用域…
// 闭包.dart
void main(){
    myClosure(){
        var a = 0; // a是一个局部变量.函数执行完毕后将被清理
        return (){
            a++;
            print(a);
        };
    }
    var fn = myClosure();
    fn();
    fn();
    fn();
}

在这里插入图片描述
原因如下:

// 1.myClosure里面返回了一个匿名函数 () { a++; print(a);};
// 2.匿名函数可以访问到myClosure()函数内部的局部变量a;
// 3.函数的返回给了fn,即fn相当于匿名函数再内存中的一个地址.可以通过fn访问到内存中的这个匿名函数

结果:

// 很明显,内存中存储a的值的,那部分区域并未释放(否则,a的值不会从1到3变化)

你可能感兴趣的:(dart)