To understand that you have to visualize the stack. Let me complete the execution process:
foo(3), i 3. i 0, log begin:3. foo(2)i 2. i 0, log begin:2. foo(1)i 1. i 0, log begin:1. foo(0)i 0. i 0, log begin:0. foo(-1)i -1. i 0, . , , log foo(0):
console.log('end:' + i);
end:0 , i 0. foo(0) , foo(1)
foo(1). end:1 , i 1. foo(1) , foo(2)foo(2). end:2 , i 2. foo(2) , foo(3).foo(3). end:3 , i 3. foo(3) , , .
:
begin:3 //Step 1
begin:2 //Step 2
begin:1 //Step 3
begin:0 //Step 4
end:0 //Step 5
end:1 //Step 6
end:2 //Step 7
end:3 //Step 8
, :
foo (-1 - 1) : 0?
foo(-1 - 1), foo(-1) - . , end:i, i , , , , foo(i - 1). , end:i, .