2016-12-28 54 views
0
inner conditional: 5 
inner conditional: 4 
inner conditional: 3 
inner conditional: 2 
inner conditional: 1 
0 

创建上述输出的函数如下,我完全理解它是如何工作的。了解递归循环,返回倒数

function loop(counter){ 

    if(counter > 0){ 
     console.log("inner conditional: " + counter); 
     return loop(counter - 1) 
    } 

    console.log(counter); 
    return counter 
} 

loop(5) 

当功能被修改,使得所述内部状态不返回的console.log显示以下的功能。

inner conditional: 5 
inner conditional: 4 
inner conditional: 3 
inner conditional: 2 
inner conditional: 1 
0 
1 
2 
3 
4 
5 

以下是负责上述输出的功能。

function loop(counter){ 

    if(counter > 0){ 
     console.log("inner conditional: " + counter); 
     loop(counter - 1) 
    } 

    console.log(counter); 
    return counter 
} 

loop(5) 

我不明白这一点。我只想解释一下发生什么事情来创建扩展前向计数。

我用下面的工具来显示逐步执行代码,我仍然没有“搞定”它:http://pythontutor.com/javascript.html#mode=display

+0

简单,去掉'return',当它结束调用'循环(计数器1)'它继续最后一个'console.log',即使计数器是'> 0' ...你可以使用'else console.log(counter);' – Giovazz89

+0

我不认为你理解这个问题。我想解释一下为什么数字会前进五次。如果你使用我链接到的代码执行工具,我想要解释一下步骤20 –

+0

之后发生了什么,这正是我的评论的意思,但也许我解释得很糟糕:调用'loop(counter-1)'在调用之后作为'console.log',意味着它将从最内层的(最后一个)调用开始“记录”,并在内层完成时从最旧的函数调用中打印出来......对不起不是精确的,希望它有帮助 – Giovazz89

回答

0

的问题是,您再次调用该函数以及与计数器< 1函数结束时,但它并没有结束实际的功能本身,而是随后用计数器进行输出。

如果缩进显示相同的功能,则显示相同的级别。

inner conditional: 5 
    inner conditional: 4 
     inner conditional: 3 
      inner conditional: 2 
       inner conditional: 1 
        0 
       1 
      2 
     3 
    4 
5 
0

您所呼叫与回报的循环功能循环功能的第一个实例中,以防止该语句的其余部分执行后,“返回”。 但是,在第二个实例中,循环函数在没有返回的情况下被调用,因此if条件之外的console.log也被执行,并且您可以看到两个console.log输出。