Dart中延迟执行方法时,参数值取请求时还是执行时?
Dart延迟执行方法时的参数值确定逻辑
在Dart中,你示例里的_someMethod(variableX)会使用Time 10时的variableX值,核心原因是闭包的变量捕获规则:
- 你传给
Future.delayed的是一个闭包() => _someMethod(variableX),这个闭包并没有在Time 0时立即计算variableX的值,而是保留了对variableX变量的引用。 - 只有当10秒后闭包实际执行时,才会去读取
variableX的当前值。如果在Time 0到Time 10之间修改了variableX的内容(比如重新赋值),_someMethod拿到的就是修改后的最新值。
举个实际测试的代码例子更直观:
void main() { var variableX = 0; // Time 0:创建延迟任务 Future.delayed(Duration(seconds: 2), () => _someMethod(variableX)); // 修改variableX的值 variableX = 10; } void _someMethod(int value) { print("执行时的variableX值:$value"); // 输出:执行时的variableX值:10 }
如果variableX被声明为final或const(不可变变量),那Time 0和Time 10的值不会有差异,闭包执行时拿到的自然也是初始值。
内容的提问来源于stack exchange,提问作者Greenlight
相关产品推荐
相关产品推荐

