DartPad,执行顺序,及时吗?

我是Dart的新手(来自JS),我想让这个简单的程序有意义。

在程序顶部声明变量并进行设置时,似乎(???)在执行main()之前未进行赋值。见下文。

List<int> a1=[1,2,3];
List<int> b1=new List.from(a1);


void main() {
  a1.add(9);
  print(a1);  // [1,3,9]
  print('b1 $b1');  //  CONFUSING   [1,9]  (I expected [1,3])


  List<int> a2=[1,3];
  List<int> b2=new List.from(a2);
  a2.add(77);

  print(a2);   // [1,77]
  print('b2 $b2');  // [1,3],as expected
}

这是因为有一些即时(JIT)代码执行吗?或者,分配工作会在以后发生,例如一些JS陷阱。我确实尝试阅读有关此文档,但无法确定代码执行顺序的任何内容。

我对学习自己的学习方式最感兴趣。因此,任何指向文档适当部分的链接都将受到赞赏。

PS。在JS中,Chrome开发者工具为调试器提供了带有断点的便捷调试器,我通常使用它来检查执行顺序错误。

谢谢。

zhouanneng 回答:DartPad,执行顺序,及时吗?

这不是JIT,只是全局变量的延迟初始化。

Dart确保在main开始之前没有用户代码运行。为了确保这一点,它在第一次读取全局变量和静态变量时会延迟进行初始化。这确实意味着,当全局变量初始化器引用可变对象时,应格外小心。

本文链接:https://www.f2er.com/3168753.html

大家都在问