嘿,我无法正确理解这段 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
所以我知道前四个输出的代码中发生了什么,但无法理解后四个输出的代码中发生了什么,请有人详细解释最后四个输出的代码,这对我很有帮助。
所以这个例子展示了递归函数调用的执行:
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