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