dart的执行顺序';s闭包或函数

dart的执行顺序';s闭包或函数,dart,Dart,我在这个网站上读到有关dart函数的文章,发现了一个有趣的例子 其中之一是: void main() { var y = () { print("foo"); return 10; }; print("bar"); print(y()); } 这是显而易见的,我理解。我们将函数赋值给变量y。 然后执行。它将打印bar foo 10 但我偶然发现了以下例子: void main() { var x = () {

我在这个网站上读到有关dart函数的文章,发现了一个有趣的例子

其中之一是:

void main() {
  var y = () {
    print("foo");
    return 10;
  };
  print("bar");
  print(y());
}
这是显而易见的,我理解。我们将函数赋值给变量y。 然后执行。它将打印bar foo 10

但我偶然发现了以下例子:

void main() {
  var x = () {
    print("foo");
    return 10;
  }();
  print("bar");
  print(x);
}
它将打印foo,然后是bar,然后是10


我不明白为什么…

这是一个立即调用函数表达式(IIFE)

在函数声明之后添加的
()
将在找到其声明后对要调用的函数进行分类

那么这个

() {  
       print ("foo"); 
       return 10; 
        }();
等于这个

x() {  
       print ("foo"); 
       return 10; 
        }
    x();
在您的代码中,所发生的是在声明时调用的函数,它打印“foo”,然后将10值返回给x,然后打印“bar”,然后打印包含10的x


我希望这是清楚的。

({print(“foo”);return 10;}
是一个函数-如果您添加
您正在调用该函数,那么现在将打印
foo
,并将
10
的值分配给
x
变量,而不是打印
bar
,最后打印
x
(意思是
10
)谢谢(){print(“foo”);return 10;}()是一个函数调用。如果对于
var y=(){print(“foo”);return 10;}
你可以使用
y()
,那么你也可以使用
({print(“foo”);return 10;}()
——但我同意:它看起来很奇怪……我对那个奇怪的语法感到困惑。现在很清楚了。酷,若这有助于投票并将问题标记为已回答;)