That's a recursive function, and IE and Chrome have different Javascript rendering engines. (Chrome uses V8). More than likely, it's some unimportant details about the internals of the particular engine. In this case related to stack size (how many times something can be recursively called before it 'blows up').
Another thing to think about, is that it's not so common for regular programs to go so deep into a call stack, unless you're poking around or doing it on purpose, like your example above.
When I say "deep", I'm referring to the fact an evaluated statement (your function) must return a value, and if it doesn't do that (and instead calls another nested function), it must evaluate that first. In this way, it's going "deeper." In your example, it never is able to get a return value of anything until it runs out of space because the innermost function never returns anything.
Here's another example:
add(1, add(5, add(10, 20)))
In this example of pseudocode, the add function takes 2 arguments, 2 numbers to add. The 2nd argument needs to be evaluated first, before it can get the return value (so it can add it to 1). So... it 'pauses' execution of 1 + ...
and then runs the second add function, which does the same thing. Now you have 2 functions which are 1 + ...
, basically waiting on "hold". Finally, the innermost function DOES return a value, 30
, so that gets passed out to the 5 + 30
which is 35, and now that 35 gets passed to the remaining waiting 1 + ...
function to complete the computation.
This can be thought of have a stack depth of 3 (to put it simply).
Basically in your program, it doesnt get that final return value (to then pass up the call chain). Instead it just runs out of space, and dies. Therefore youre merely testing the limits of the various javascript engines and when they choose to die.