As you probably know, x-- decreases x , and then returns its value to decrement. We can also write your code as follows:
function recaller() { while(true) { var oldX = x; x--; if(!(oldX < 0)) { break; } recaller(); } }
Now itβs easier to log in. I think this is a little easier to see with some indentation, so I have a few functions that are not shown here. With some logging, it looks like this:
function recaller() { indent(); log("Recaller called"); while(true) { log("In loop, before decrement and test"); var oldX = x; x--; log("In loop; decremented"); if(!(oldX > 0)) { log("Test failed"); break; } log("Test succeeded"); log("In loop, before recursion"); recaller(); log("In loop, after recursion"); } log("About to return from recaller"); dedent(); }
You can see the result on JSFiddle.
Looking at the magazine, you can say that it reduces it (to zero below zero) even if the test fails, which leads to a negative number.
source share