【发布时间】:2020-12-17 19:26:04
【问题描述】:
function foo(i)
{
if (i < 0) return;
console.log('begin: ' + i);
foo(i - 1);
console.log('end: ' + i);
}
foo(3);
这段代码打印出来:
begin: 3
begin: 2
begin: 1
begin: 0
end: 0
end: 1
end: 2
end: 3
我了解开始结果的工作原理。
我只是无法理解“结束:”行背后的逻辑。
为什么它又从零开始计数到 3,这对我来说没有任何意义。
有人请给我解释一下代码我是新手
【问题讨论】:
-
代替控制台日志,在浏览器中设置断点并检查发生了什么。
-
因为这是递归的,所以你并没有真正循环。您到达最后一项,然后在每个递归调用开始退出时开始输出
end值。递归函数将退出调用它们的相反顺序(堆栈顺序)。 -
在
foo(3)可以结束之前,它必须执行foo(2)。但在foo(2)可以结束之前,它必须执行foo(1)。但在foo(1)可以结束之前,它必须执行foo(0)。foo(0)运行,执行foo(-1),它只做return,并打印end: 0。现在,foo(1)可以通过记录end: 1来结束。现在foo(2)可以通过记录end: 2来结束...你明白了
标签: javascript function loops if-statement