我对运行以下函数的确切执行时间线感到有点困惑。我在MDN指南上看到了这段代码:
function foo (i) {
if (i<0) return;
console.log('begin' + i);
foo(i-1);
console.log('end' + i);
}
根据我对功能如何运作的了解,这就是我的想法,尽管我的知识不足:
我认为当调用函数foo(3)
时,它将转到函数并检查条件if i < 0
,然后它将运行下一个代码console.log('begin:' + i)
。
之后,执行下一行代码,因为JavaScript逐行执行,下一行代码foo(i-1)
将被执行。
i
的当前值为3
减去1,因此调用foo(2)
并继续执行。
我的问题是:我的理解是否正确?。如果没有请解释这个代码在做什么,否则任何人都可以解释这个函数什么时候停止被调用?
答案 0 :(得分:2)
调用foo(3)
时会发生以下情况(伪代码):
execute foo(3)
3 is greater than 0 thus log(begin 3)
execute foo(2)
2 is greater than 0 thus log(begin 2)
execute foo(1)
1 is greater than 0 thus log(begin 1)
execute foo(0)
0 is equal to 0 thus log(begin 0)
execute foo(-1)
-1 is less than 0 thus return
log(end 0)
log(end 1)
log(end 2)
log(end 3)
return
答案 1 :(得分:1)
它的工作原理如下:
foo(3)->
if (3 < 0)
return
console.log('begin' + 3)
if (2 < 0)
return
console.log('begin' + 2)
if (1 < 0)
return
console.log('begin' + 1)
if (0 < 0)
return
console.log('begin' + 0)
if (-1 < 0)
return
console.log('end' + 0)
console.log('end' + 1)
console.log('end' + 2)
console.log('end' + 3)