函数返回Dart后是否删除函数中的局部变量?

函数返回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"; }

在这段代码中,我设法在函数返回后使用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";
}
输出:

out from func
局部变量i=2

变量超出范围时将被删除。对于函数参数,您正在扩展范围,因此
i
是发送到
Future.delayed
的函数的一部分。因此,只要此函数存在,变量
i
将保留在内存中。如果变量多于
i
,但未在
将来使用。delayed()
,则范围也将扩展?如果多次调用
fun()
,则应添加此项,您正在创建
i
变量的不同实例,其中每个实例都用于指定给
Future.delayed的函数中。因此,它们并不是共享同一个
i
变量。这取决于编译器和运行时的实现,如果要进行此类优化(只保留对函数中使用的变量的引用)。一般来说,除非您发现对象没有被垃圾收集,否则不应该考虑它。