动态范围

时间:2014-05-19 08:48:57

标签: dynamic scoping

使用动态范围时,第一个输出显然是10。

我对第二次输出感到好奇。你好吗或30.5为什么?

void main() {
  f1(); 
  f2();  
} 

void f1() { 
  int x = 10; 
  g();
}

void f2() {
  String x = "hello";
  f3(); 
  g(); 
}

void f3() {
  double x = 30.5;
}

void g() { 
  print(x)
}

1 个答案:

答案 0 :(得分:-1)

动态作用域意味着x指的是在调用堆栈的最近一帧中声明的x有一个。

所以因为g()之前的最近一次调用是f3()所以答案是30.5而不是你好。