我有以下代码示例来说明我的观点。当我加载此在IE8在Vista上我得到的错误“堆栈Overfow在行:16”使用Javascript类函数执行15次递归后的堆栈溢出
如果我改乘使用顶级函数(TestClass的对象外)我可以递归数百万次无堆栈溢出。
这是怎么发生的?最终,我只是实现了一个Function Que,而不是使用递归,但对我来说没有意义,我想了解原因。
- 代码 -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
<html>
<head>
<title>Recusion Test</title>
<body>
</body>
<script type="text/javascript">
function testClass() {
this.x = 15;
this.recurse = function() {
this.x--;
this.recurse();
}
}
var wtf = new testClass();
wtf.recurse();
alert('done');
</script>
</head>
</html>
好的,这是我的一个错误,我简化了一个复杂的类用于演示目的,我忘了包括它。请参阅下面的答案。在我的实际代码库中,我能够在没有SO的情况下递归14次,但在15时它会失败。 – 2009-10-08 21:29:05