javascript - What is the logic behind this double function call with recursion? -


where have console logs, countdown seems count down 10 1 (this makes sense) after this, way seems add 15 final result of countdown 9 times, happen, i'd imagine after each countdown loop, way called, each keeps track of own value? clarification why , when of logic helpful - thanks!

var countdown = function(value) {    value = value - 1;        if (value == 0) {      return value;    }        console.log("loop 1 " + value);    return way(countdown(value));  };    function way(value) {    value = value + 15;    console.log(value);    return value;  }    countdown(10);

as commented above value local variable in either function , bound scope of either function. doesn't contribute confusion aside expecting complexity there. ;)

the behaviour arises countdown() being called recursively , calling way() has wait until recursive calls countdown() returning. that's not happening until countdown()'s recursion has stopped @ value 0 returned eventually. after countdown() isn't invoked ever again, since countdown() invoked recursively , bubbling through invocations of countdown() there multiple calls way() result returned countdown() called @ end in turn calling way() result of countdown() etc. ... ok, got bit confused here myself.

since value isn't required complex might eliminate reducing code:

 function countdown(value) {   if ( value == 1 ) { return 0; } // bail out condition    console.log("loop 1 " + value)   return way( countdown( value - 1 ) ); };  function way( value ) {   console.log(value);   return value + 15; }  countdown(10); 

way() of no relevance recursion , might substituted:

 function countdown(value) {   if ( value == 1 ) { return 0; } // bail out condition    console.log("loop 1 " + value)   return countdown( value - 1 ) + 15; };  countdown(10); 

due recursion code diving stack 9 frames deep. , bubbling stack returning result of every passed frame increased 15 prior bubbling further on.

so actually, there 1 recursion.


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -