函数返回Dart后是否删除函数中的局部变量?
在这段代码中,我设法在函数返回后使用Future delay打印局部变量 这是怎么发生的 我认为函数返回后会删除局部变量:函数返回Dart后是否删除函数中的局部变量?,dart,future,Dart,Future,在这段代码中,我设法在函数返回后使用Future delay打印局部变量 这是怎么发生的 我认为函数返回后会删除局部变量: void main() { print(fun()); } String fun() { var i = 1; Future.delayed(Duration(seconds: 5), () { print('local var i=${i}'); }); i = 2; return "out from func"; }
void main() {
print(fun());
}
String fun() {
var i = 1;
Future.delayed(Duration(seconds: 5), () {
print('local var i=${i}');
});
i = 2;
return "out from func";
}
输出:
out from func
局部变量i=2
变量超出范围时将被删除。对于函数参数,您正在扩展范围,因此i
是发送到Future.delayed
的函数的一部分。因此,只要此函数存在,变量i
将保留在内存中。如果变量多于i
,但未在将来使用。delayed()
,则范围也将扩展?如果多次调用fun()
,则应添加此项,您正在创建i
变量的不同实例,其中每个实例都用于指定给Future.delayed的函数中。因此,它们并不是共享同一个i
变量。这取决于编译器和运行时的实现,如果要进行此类优化(只保留对函数中使用的变量的引用)。一般来说,除非您发现对象没有被垃圾收集,否则不应该考虑它。