2

我有这样的事情:

function recurse(a){
  for(i = a; i < 3; i++){
    alert(i);
    if(i == 0){
      recurse(++a);
    }
  }
} 
recurse(0);

我期望的输出是 0(调用新函数)1、2(结束调用的第二个函数),然后用 1 和 2 完成函数的第一次运行。但它只警告 0,1 和 2 一次它完成了。

4

1 回答 1

2

i是全球性的

尝试var i,您可能会得到您期望的行为。

function recurse(a){
  for(var i = a; i < 3; i++){
    alert(i);
    if(i == 0){
      recurse(++a);
    }
  }
} 
recurse(0);

输出:0, 1, 2, 1, 2

第一个1, 2是来自更深层次的递归。

正如最初所写的那样,你会0从顶层,1,2从更深的层面得到,然后在顶层什么都没有(因为i < 3不再满足)。

于 2013-03-13T02:25:28.453 回答