1

这是一个无限循环的递归函数。

<html>
<body>
<script type="text/javascript">

function repeat(x){
document.write(x+" ");
repeat(x+1);
}

repeat(1);

</script>
</body>
</html>

使用该函数,我可以看到内存不足之前在那里发生了多少递归调用。第一次,我在 Firefox 上运行它。

结果 -> 1 2 3 .... 最多 40536

现在,我刷新页面

结果 -> 1 2 3 ... 最多 46046

!!再次刷新或在不同的浏览器上运行,我得到了不同的结果。

这怎么可能?javascript中递归的调用堆栈逻辑/限制是什么?

4

2 回答 2

2

JavaScript 规范不要求任何特定的内存限制。每个实现都可以施加它想要的任何内存限制。

于 2013-08-12T06:31:55.443 回答
2
Internet Explorer 7: 1,789
Firefox 3: 3,000
Chrome 1: 21,837
Opera 9.62: 10,000
Safari 3.2: 500

这都是一些限制

请参阅此 http://javascriptrules.com/2009/06/30/limitation-on-call-stacks/

还有这个

http://www.nczonline.net/blog/2009/05/19/javascript-stack-overflow-error/

于 2013-08-12T06:32:07.187 回答