递归 - 测试最大堆栈大小时调用堆栈无法弹出

Raj*_*amy 14 javascript callstack event-loop

基本上调用栈将开始流行函数调用一个接一个,当最后的函数调用返回.但是当我尝试创建一个接近其最大值的调用堆栈时,An uncaught expression就会被提升.

//Code for testing the stack size
var cnt = 0;

function test(){
 //Max stack size is nearer to ~41800
 if(cnt++ == 41763){
  console.log('finished');
  return true;
 }
 return test();
}

test();
Run Code Online (Sandbox Code Playgroud)

所以上面的代码在我的Chrome版本49.0.2623.112 m中给我一个例外,如下所示,

未捕获的异常

<true

请注意,上述错误中没有消息.我的问题是,

堆栈中的最后一个函数调用已返回true,这意味着未超出堆栈大小.为什么没有返回该堆栈中的其他函数调用?这个空白异常消息的原因是什么?

ove*_*wed 8

这里的问题是

console.log('finished');
Run Code Online (Sandbox Code Playgroud)

这为调用堆栈添加了一些额外的函数,可以超出限制,但是通过异常处理,无论如何都会执行代码.

尝试在没有console.log的情况下运行它,你会发现你达到了极限,看到了真或异.

  • console.log是本机代码,javascript中没有函数,所以它没有附带javascript堆栈跟踪和异常. (3认同)