dart的执行顺序';s闭包或函数
我在这个网站上读到有关dart函数的文章,发现了一个有趣的例子 其中之一是: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 = () {
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;}()
——但我同意:它看起来很奇怪……我对那个奇怪的语法感到困惑。现在很清楚了。酷,若这有助于投票并将问题标记为已回答;)