You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:58:06