功能相同,时间不同

时间:2013-08-12 06:27:36

标签: javascript recursion out-of-memory callstack

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

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

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

repeat(1);

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

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

  

结果 - &gt; 1 2 3 ....至40536

现在,我刷新页面

  

结果 - &gt; 1 2 3 ......高达46046

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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/