嘿,我无法正确理解这段JavaScript代码:
foo(i) {
if (i < 0)
return;
console.log('begin: ' + i);
foo(i - 1);
console.log('after: ' + i);
}
foo(3);
输出
begin: 3
begin: 2
begin: 1
begin: 0
after: 0
after: 1
after: 2
after: 3
所以我知道在前四个输出的代码中发生了什么,但是无法理解代码中最后四个输出发生了什么,有人解释这个代码详细说明最后四个输出它会真的对我有帮助。
答案 0 :(得分:1)
因此,此示例显示了执行时的递归函数调用:
function foo(i)
{
if(i<0)
return;
console.log('begin: ' +i); // Line 1
foo(i-1); // Line 2
console.log('after: ' +i); // Line 3
}
foo(3);
首先调用第1行,然后在第2行再次调用该函数,然后再调用第3行
所以执行堆栈看起来像这样
console.log('begin: ' +3); // Line 1
foo(2); // Line 2
console.log('after: ' +3); // Line 3
现在下一行2将再次转换为:
console.log('begin: ' +3); // Line 1
console.log('begin: ' +2); // Line 1
foo(1); // Line 2
console.log('after: ' +2); // Line 3
console.log('after: ' +3); // Line 3
等等
console.log('begin: ' +3); // Line 1
console.log('begin: ' +2); // Line 1
console.log('begin: ' +1); // Line 1
foo(0); // Line 2
console.log('after: ' +1); // Line 3
console.log('after: ' +2); // Line 3
console.log('after: ' +3); // Line 3
最后一次迭代:
console.log('begin: ' +3); // Line 1
console.log('begin: ' +2); // Line 1
console.log('begin: ' +1); // Line 1
console.log('begin: ' +0); // Line 1
foo(-1) // Line 2 for negative value, we are exiting the recursion.
console.log('after: ' +0); // Line 3
console.log('after: ' +1); // Line 3
console.log('after: ' +2); // Line 3
console.log('after: ' +3); // Line 3