首先得明白下面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变化)