Learning JS from MDN Docs came across code in “functions section”.
Not able to understand what does return;
in the below code accomplish
function foo(i) { if (i < 0) return; // what does this do? console.log('begin: ' + i); foo(i - 1); console.log('end: ' + i); } foo(3);
Output
'begin: 3' 'begin: 2' 'begin: 1' 'begin: 0' 'end: 0' 'end: 1' // why are these printing 'end: 2' // this one 'end: 3' // this one
I understood first 5 lines of output, but not able to understand why end: 0,1,2,3
are coming?
Please help !
Advertisement
Answer
return
terminates the current function, and returns control flow to the caller.
When foo(3);
is called, the function is initialized with an i
parameter of 3. It fails the if
statement, prints begin: 3
, and then calls foo(3 - 1);
. At this point, the current function (the one with an i
parameter of 3) is paused until the foo(3 - 1);
call completes.
foo(2);
prints begin: 2
, and then pauses while calling foo(1)
.
foo(1)
prints begin: 1
, and then pauses while calling foo(0)
.
foo(0)
prints begin: 0
, and returns: it terminates, and yields control flow back to its caller, the function call of foo(1)
.
foo(1)
resumes, and continues executing, printing end: 1
. That’s the end of the function block, so the foo(1)
function call ends, yielding control flow back to the foo(2)
function call.
foo(2)
resumes, printing end: 2
, then terminates, yielding control flow back to foo(3)
. Then foo(3)
prints end: 3
, and terminates.
return
only terminates the current function. The only way to terminate all calling functions (until a catch
is encountered) would be to throw an error:
function foo(i) { if (i < 0) throw new Error(); console.log('begin: ' + i); foo(i - 1); console.log('end: ' + i); } foo(3);